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.