Když používáte form_for :
Ve vašem případě Video Modelka. Pro pochopení konvence Rails:
<%= form_for @video do |f| %>
...
<%= f.text_field :description %>
...
Výsledkem je značka html, jejíž atribut názvu je video[description] . To znamená, že po odeslání formuláře bude hodnota zadaná uživatelem k dispozici v ovladači jako params[:video][:description] .
params proměnná je instací ActiveSupport::HashWithIndifferentAccess , jako je Hash s malým rozdílem, podle dokumentace:
Vaše params je něco jako:
{"utf8"=>"✓",
"_method"=>"post",
"authenticity_token"=>"xxx",
"video"=>
{"description"=>"Video desc"}
}
Kde "video" nebo :video je jedním z klíčů hash. Takže params[:video] je ekvivalentní params.fetch("video") která hodnota je {"description"=>"Video desc"} . Jak vidíte, hodnota je další hash. Nakonec, abyste získali hodnotu popisu, musíte params[:video][:description] (The Rails way) nebo params.fetch("video").fetch("description") , jehož hodnota je "Video desc" .
fetch je Ruby metoda Hash :"Vrátí hodnotu z hash pro daný klíč."
Vezmeme-li toto v úvahu:
Video.new(params[:video]) = Video.new(:description => "Video desc") = Video.new(:description => params[:video][:description])
Je jednodušší používat konvence, ale určitě můžete mít params[:description] (jen pro případ):
<%= form_for @video do |f| %>
...
<%= text_field_tag :description %>
...
Všimněte si, že používám text_field_tag místo f.text_field . V tomto případě bude název značky html description v params Hash obdržíte { "description" => 'Video desc" } ...
Podívejte se na dokumentaci rozhraní Rails API abyste porozuměli různým pomocníkům atd. A také si prohlédněte protokol vašeho serveru.