Saat Anda menggunakan form_for :
Dalam kasus Anda, Video model. Untuk memahami konvensi Rails:
<%= form_for @video do |f| %>
...
<%= f.text_field :description %>
...
Yang menghasilkan tag html yang atribut namanya adalah video[description] . Artinya saat formulir dikirimkan, nilai yang dimasukkan oleh pengguna akan tersedia di pengontrol sebagai params[:video][:description] .
params variabel adalah turunan dari ActiveSupport::HashWithIndifferentAccess , seperti Hash dengan sedikit perbedaan, menurut dokumentasi:
params . Anda adalah sesuatu seperti:
{"utf8"=>"✓",
"_method"=>"post",
"authenticity_token"=>"xxx",
"video"=>
{"description"=>"Video desc"}
}
Dimana "video" atau :video adalah salah satu kunci dari Hash. Jadi, params[:video] setara dengan params.fetch("video") yang nilainya {"description"=>"Video desc"} . Seperti yang Anda lihat, nilainya adalah Hash lain. Akhirnya untuk mendapatkan nilai deskripsi Anda harus params[:video][:description] (The Rails way) atau params.fetch("video").fetch("description") , yang nilainya "Video desc" .
fetch adalah metode Ruby dari Hash :"Mengembalikan nilai dari hash untuk kunci yang diberikan."
Mempertimbangkan hal ini:
Video.new(params[:video]) = Video.new(:description => "Video desc") = Video.new(:description => params[:video][:description])
Lebih mudah menggunakan konvensi, tetapi yang pasti Anda dapat memiliki params[:description] (untuk jaga-jaga):
<%= form_for @video do |f| %>
...
<%= text_field_tag :description %>
...
Perhatikan bahwa saya menggunakan text_field_tag bukannya f.text_field . Dalam hal ini nama tag html akan menjadi description di params Hash Anda akan menerima { "description" => 'Video desc" } ...
Lihat dokumentasi Rails API untuk memahami helper yang berbeda, dll. Dan juga meninjau log server Anda.