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.