rails simple_form - ฟิลด์ที่ซ่อน - สร้าง?


174

คุณจะมีเขตข้อมูลที่ซ่อนอยู่ในรูปแบบง่ายๆได้อย่างไร

รหัสต่อไปนี้:

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

ผลลัพธ์ในข้อผิดพลาดนี้:

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

คำตอบ:


309

ลองนี้

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

8
ขอบคุณที่ทำงาน = f.input :title, :as => :hidden, :input_html => { :value => "some value" }
Linus Oleander

5
นี่เป็นsimple_formวิธีการทำอินพุตที่ซ่อนอยู่ แต่ถ้าต้องการเพียงอินพุตที่ซ่อนอยู่ให้ใช้ตัวhidden_fieldสร้างฟอร์มของ Rails เนื่องจาก Simple Form จะสืบทอดเมธอดตัวสร้างฟอร์มทั้งหมด
scarver2

281

สั้นที่สุด แต่ !!!

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

สั้นกว่า DRYer และอาจชัดเจนกว่า

แน่นอนว่าด้วย ruby ​​1.9 และรูปแบบแฮชใหม่เราสามารถสั้นลง 3 ตัวอักษรด้วย ...

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

1
หรือ <% = f.hidden_field: term_id,: value => @ transaction.term_id%>
mirap

2
นี่ควรเป็นคำตอบที่ยอมรับได้ แม้ว่าคำถามจะถามเกี่ยวกับรูปแบบที่เรียบง่าย แต่ก็ไม่มีเหตุผลที่จะใช้เมื่อสิ่งนี้ทำสิ่งเดียวกันกับไวยากรณ์ที่สั้นกว่า
Greg Blass

5
= f.input_field :title, as: :hidden, value: "some value"

ยังเป็นตัวเลือก อย่างไรก็ตามโปรดทราบว่ามันข้าม wrapper ใด ๆ ที่กำหนดไว้สำหรับการสร้างแบบฟอร์มของคุณ


5

วิธีที่ถูกต้อง (หากคุณไม่พยายามรีเซ็ตค่าของอินพุต hidden_field) คือ:

f.hidden_field :method, :value => value_of_the_hidden_field_as_it_comes_through_in_your_form

ที่ไหน :method เป็นวิธีการที่เรียกว่าเมื่อผลวัตถุที่อยู่ในค่าที่คุณต้องการ

ดังนั้นทำตามตัวอย่างด้านบน:

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

รหัสที่ใช้ในตัวอย่างจะรีเซ็ตค่า (: title) ของ @movie ที่ส่งผ่านโดยแบบฟอร์ม หากคุณต้องการเข้าถึงค่า (: ชื่อเรื่อง) ของภาพยนตร์แทนที่จะทำการรีเซ็ตให้ทำดังนี้:

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

ใช้คำตอบของฉันอีกครั้งเท่านั้นคือคุณไม่ต้องการรีเซ็ตค่าที่ส่งโดยผู้ใช้

ฉันหวังว่านี่จะสมเหตุสมผล


1
สำหรับsimple_form_forการhiddenวิธีการใช้ที่นี่เป็นไปที่จะยกข้อผิดพลาดundefined method ที่ซ่อนอยู่สำหรับ # <SimpleForm :: FormBuilder: 0x00007ffa6cde0be8> `
Kiry Meas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.