Wanneer u form_for
. gebruikt :
In jouw geval, Video
model. Om de Rails-conventie te begrijpen:
<%= form_for @video do |f| %>
...
<%= f.text_field :description %>
...
Wat resulteert in een html-tag waarvan het naamkenmerk video[description] . is . Dit betekent dat wanneer het formulier wordt verzonden, de door de gebruiker ingevoerde waarde beschikbaar zal zijn in de controller als params[:video][:description] .
De params
variabele is een instantie van ActiveSupport::HashWithIndifferentAccess
, zoals een Hash
met een klein verschil, volgens documentatie:
Je params
is zoiets als:
{"utf8"=>"✓",
"_method"=>"post",
"authenticity_token"=>"xxx",
"video"=>
{"description"=>"Video desc"}
}
Waar "video"
of :video
is een van de sleutels van de Hash. Dus, params[:video]
is gelijk aan params.fetch("video")
welke waarde is {"description"=>"Video desc"}
. Zoals je kunt zien, is de waarde een andere hash. Ten slotte moet je om de waarde van de beschrijving te krijgen params[:video][:description]
(The Rails way) of params.fetch("video").fetch("description")
, welke waarde is "Video desc"
.
fetch
is een Ruby-methode van Hash
:"Retourneert een waarde van de hash voor de opgegeven sleutel."
Hiermee rekening houdend:
Video.new(params[:video]) = Video.new(:description => "Video desc") = Video.new(:description => params[:video][:description])
Het is gemakkelijker om conventies te gebruiken, maar u kunt zeker params[:description]
hebben (voor het geval dat):
<%= form_for @video do |f| %>
...
<%= text_field_tag :description %>
...
Merk op dat ik text_field_tag
. gebruik in plaats van f.text_field
. In dit geval is de html-tagnaam description
in de params
Hash ontvangt u { "description" => 'Video desc" }
...
Bekijk de Rails API-documentatie om verschillende helpers te begrijpen, enz. En bekijk ook het logboek van uw server.