Quando utilizzi form_for :
Nel tuo caso, Video modello. Per comprendere la convenzione Rails:
<%= form_for @video do |f| %>
...
<%= f.text_field :description %>
...
Il che si traduce in un tag html il cui attributo name è video[description] . Ciò significa che al momento dell'invio del modulo, il valore inserito dall'utente sarà disponibile nel controller come params[:video][:description] .
I params variabile è un'istanza di ActiveSupport::HashWithIndifferentAccess , come un Hash con una piccola differenza, secondo la documentazione:
I tuoi params è qualcosa del tipo:
{"utf8"=>"✓",
"_method"=>"post",
"authenticity_token"=>"xxx",
"video"=>
{"description"=>"Video desc"}
}
Dove "video" o :video è una delle chiavi dell'Hash. Quindi, params[:video] è equivalente a params.fetch("video") il cui valore è {"description"=>"Video desc"} . Come puoi vedere il valore è un altro hash. Infine per ottenere il valore della descrizione devi params[:video][:description] (The Rails way) o params.fetch("video").fetch("description") , il cui valore è "Video desc" .
fetch è un metodo Ruby di Hash :"Restituisce un valore dall'hash per la chiave data."
Tenendo conto di ciò:
Video.new(params[:video]) = Video.new(:description => "Video desc") = Video.new(:description => params[:video][:description])
È più facile usare le convenzioni, ma di sicuro puoi avere params[:description] (per ogni evenienza):
<%= form_for @video do |f| %>
...
<%= text_field_tag :description %>
...
Nota che sto usando text_field_tag invece di f.text_field . In questo caso il nome del tag html sarà description nei params Hash riceverai { "description" => 'Video desc" } ...
Dai un'occhiata alla documentazione API Rails per comprendere diversi aiutanti, ecc. E anche rivedere il registro del tuo server.