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

Jawaban:


309

coba ini

= f.input :title, :as => :hidden, :input_html => { :value => "some value" }

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"

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.


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.


1
Sebab simple_form_for, hiddenmetode yang digunakan di sini akan memunculkan kesalahan yang undefined method disembunyikan 'untuk # <SimpleForm :: FormBuilder: 0x00007ffa6cde0be8> `
Kiry Meas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.