Cuando estás usando form_for
:
En tu caso, Video
modelo. Para entender la convención de Rails:
<%= form_for @video do |f| %>
...
<%= f.text_field :description %>
...
Lo que da como resultado una etiqueta html cuyo atributo de nombre es video[descripción] . Esto significa que cuando se envía el formulario, el valor ingresado por el usuario estará disponible en el controlador como params[:video][:description] .
Los params
la variable es una instancia de ActiveSupport::HashWithIndifferentAccess
, como un Hash
con una pequeña diferencia, según la documentación:
Tus params
es algo como:
{"utf8"=>"✓",
"_method"=>"post",
"authenticity_token"=>"xxx",
"video"=>
{"description"=>"Video desc"}
}
Donde "video"
o :video
es una de las claves del Hash. Entonces, params[:video]
es equivalente a params.fetch("video")
cuyo valor es {"description"=>"Video desc"}
. Como puede ver, el valor es otro Hash. Finalmente, para obtener el valor de la descripción, debe params[:video][:description]
(al estilo Rails) o params.fetch("video").fetch("description")
, cuyo valor es "Video desc"
.
fetch
es un método Ruby de Hash
:"Devuelve un valor del hash para la clave dada".
Teniendo esto en cuenta:
Video.new(params[:video]) = Video.new(:description => "Video desc") = Video.new(:description => params[:video][:description])
Es más fácil usar convenciones, pero seguro que puede tener params[:description]
(por si acaso):
<%= form_for @video do |f| %>
...
<%= text_field_tag :description %>
...
Tenga en cuenta que estoy usando text_field_tag
en lugar de f.text_field
. En este caso, el nombre de la etiqueta html será description
en los params
Hash que recibirás { "description" => 'Video desc" }
...
Eche un vistazo a la documentación de la API de Rails para comprender diferentes ayudantes, etc. Y también revise el registro de su servidor.