ข้อผิดพลาด 'รวม' วิธีการที่ไม่ได้กำหนดฟิลด์ Rails Hidden


152

ฉันอยากทำอะไรแบบนี้กับราง

นี่คือสิ่งที่ฉันมีอยู่ในราง:

<%= form_for @order do |f| %>
  <%= f.hidden_field :service, "test" %>
  <%= f.submit %>
<% end %>

แต่ฉันได้รับข้อผิดพลาดนี้:

undefined method `merge' for "test":String

ฉันจะส่งผ่านค่าใน hidden_field ของฉันในรางได้อย่างไร


64
คุณจะยอมรับคำตอบไหม
apneadiving

คำตอบ:


417

คุณควรทำ:

<%= f.hidden_field :service, :value => "test" %>

hidden_field คาดหวังว่าแฮชเป็นอาร์กิวเมนต์ที่สอง


9
มันไม่สอดคล้องกันอย่างที่เราเขียน<%= hidden_field_tag :service, "test" %>เมื่อไม่ได้ใช้form_for |f|...
Augustin Riedinger

55

คุณกำลังใช้ hidden_field แทน hidden_field_tag เนื่องจากคุณกำลังใช้รุ่นที่ไม่ใช่ _tag จึงถือว่าตัวควบคุมของคุณได้ตั้งค่าสำหรับแอตทริบิวต์นั้นบนวัตถุที่สนับสนุนฟอร์ม ตัวอย่างเช่น:

ควบคุม:

def new
  ...
  @order.service = "test"
  ...
end</pre>

ดู:

<%= form_for @order do |f| %>
  <%= f.hidden_field :service %>
  <%= f.submit %>
<% end %>




0

อย่างไรก็ตามฉันไม่ได้ใช้ฟิลด์ที่ซ่อนไว้เพื่อส่งข้อมูลจากเซิร์ฟเวอร์ไปยังเบราว์เซอร์ แอตทริบิวต์ของข้อมูลน่ากลัว คุณทำได้

<%= form_for @order, 'data-service' => 'test' do |f| %>

จากนั้นรับค่าของคุณลักษณะด้วย jquery

$('form').data('service')
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.