Gdy używasz form_for :
W Twoim przypadku Video Model. Aby zrozumieć konwencję Railsów:
<%= form_for @video do |f| %>
...
<%= f.text_field :description %>
...
Co skutkuje tagiem HTML, którego atrybut name to video[description] . Oznacza to, że po przesłaniu formularza wartość wprowadzona przez użytkownika będzie dostępna w kontrolerze jako parametry[:video][:description] .
params zmienna jest instancją ActiveSupport::HashWithIndifferentAccess , jak Hash z niewielką różnicą, zgodnie z dokumentacją:
Twoje params to coś takiego:
{"utf8"=>"✓",
"_method"=>"post",
"authenticity_token"=>"xxx",
"video"=>
{"description"=>"Video desc"}
}
Gdzie "video" lub :video jest jednym z kluczy skrótu. A więc params[:video] jest odpowiednikiem params.fetch("video") która wartość to {"description"=>"Video desc"} . Jak widać wartość to kolejny skrót. Na koniec, aby uzyskać wartość opisu, musisz params[:video][:description] (Sposób Rails) lub params.fetch("video").fetch("description") , którego wartość to "Video desc" .
fetch to Ruby metoda Hash :"Zwraca wartość hash dla podanego klucza."
Biorąc to pod uwagę:
Video.new(params[:video]) = Video.new(:description => "Video desc") = Video.new(:description => params[:video][:description])
Łatwiej jest używać konwencji, ale na pewno możesz mieć params[:description] (na wszelki wypadek):
<%= form_for @video do |f| %>
...
<%= text_field_tag :description %>
...
Zauważ, że używam tagu text_field_tag zamiast f.text_field . W tym przypadku nazwą tagu html będzie description w params Hash otrzymasz { "description" => 'Video desc" } ...
Zapoznaj się z dokumentacją Rails API aby zrozumieć różnych pomocników itp., a także przejrzyj dziennik serwera.