Quando você está usando
form_for :No seu caso,
Video modelo. Para entender a convenção do Rails:<%= form_for @video do |f| %>
...
<%= f.text_field :description %>
...
O que resulta em uma tag html cujo atributo name é video[description] . Isso significa que quando o formulário for enviado, o valor inserido pelo usuário estará disponível no controlador como params[:video][:description] .
Os
params variável é uma instância de ActiveSupport::HashWithIndifferentAccess , como um Hash com uma pequena diferença, de acordo com a documentação:Seus
params é algo como:{"utf8"=>"✓",
"_method"=>"post",
"authenticity_token"=>"xxx",
"video"=>
{"description"=>"Video desc"}
}
Onde
"video" ou :video é uma das chaves do Hash. Então, params[:video] é equivalente a params.fetch("video") qual valor é {"description"=>"Video desc"} . Como você pode ver o valor é outro Hash. Finalmente, para obter o valor da descrição, você deve params[:video][:description] (A maneira Rails) ou params.fetch("video").fetch("description") , cujo valor é "Video desc" . fetch é um método Ruby de Hash :"Retorna um valor do hash para a chave fornecida." Levando isso em consideração:
Video.new(params[:video]) = Video.new(:description => "Video desc") = Video.new(:description => params[:video][:description])
É mais fácil usar convenções, mas com certeza você pode ter
params[:description] (apenas no caso de):<%= form_for @video do |f| %>
...
<%= text_field_tag :description %>
...
Observe que estou usando
text_field_tag em vez de f.text_field . Neste caso, o nome da tag html será description nos params Hash você receberá { "description" => 'Video desc" } ... Dê uma olhada na documentação da API Rails para entender diferentes ajudantes, etc. E também revisar o log do seu servidor.