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.