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.