rails simple_form - bidang tersembunyi - buat?

174

Bagaimana Anda bisa memiliki bidang tersembunyi dengan bentuk sederhana?

Kode berikut:

= simple_form_for @movie do |f|
  = f.hidden :title, "some value"
  = f.button :submit

mengakibatkan kesalahan ini:

undefined method `hidden' for #SimpleForm::FormBuilder:0x000001042b7cd0
Linus Oleander
sumber

Jawaban:

309

coba ini

= f.input :title, :as => :hidden, :input_html => { :value => "some value" }
fl00r
sumber
8
Terima kasih, itu berhasil. = f.input :title, :as => :hidden, :input_html => { :value => "some value" }
Linus Oleander
5
Ini adalah simple_formcara untuk melakukan input tersembunyi, namun, jika hanya input tersembunyi yang diperlukan, maka cukup gunakan hidden_fieldpembuat pembangun Rails karena Formulir Sederhana mewarisi semua metode pembangun formulir.
scarver2
281

Namun terpendek !!!

=f.hidden_field :title, :value => "some value"

Lebih pendek, KERING dan mungkin lebih jelas.

Tentu saja dengan ruby ​​1.9 dan format hash baru kita bisa lebih pendek 3 karakter dengan ...

=f.hidden_field :title, value: "some value"
Michael Durrant
sumber
1
Atau <% = f.hidden_field: term_id,: value => @ transaction.term_id%>
mirap
2
Ini harus menjadi jawaban yang diterima. Meskipun pertanyaan yang diajukan tentang bentuk sederhana, tidak ada alasan untuk menggunakannya ketika ini menyelesaikan hal yang sama persis dengan sintaks yang lebih pendek.
Greg Blass
5
= f.input_field :title, as: :hidden, value: "some value"

Juga merupakan opsi. Namun, perhatikan bahwa ia melewatkan pembungkus apa pun yang ditentukan untuk pembuat formulir Anda.

Fuad Saud
sumber
5

Cara yang benar (jika Anda tidak mencoba mereset nilai input hidden_field) adalah:

f.hidden_field :method, :value => value_of_the_hidden_field_as_it_comes_through_in_your_form

Di mana :method metode yang ketika dipanggil pada objek menghasilkan nilai yang Anda inginkan

Jadi ikuti contoh di atas:

= simple_form_for @movie do |f|
  = f.hidden :title, "some value"
  = f.button :submit

Kode yang digunakan dalam contoh ini akan mengatur ulang nilai (: judul) dari @movie yang diteruskan oleh formulir. Jika Anda perlu mengakses nilai (: judul) film, alih-alih mengatur ulangnya, lakukan ini:

= simple_form_for @movie do |f|
  = f.hidden :title, :value => params[:movie][:title]
  = f.button :submit

Sekali lagi hanya menggunakan jawaban saya adalah Anda tidak ingin mengatur ulang nilai yang dikirimkan oleh pengguna.

Saya harap ini masuk akal.

Uzzar
sumber
1
Sebab simple_form_for, hiddenmetode yang digunakan di sini akan memunculkan kesalahan yang undefined method disembunyikan 'untuk # <SimpleForm :: FormBuilder: 0x00007ffa6cde0be8> `
Kiry Meas