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.