Rails hidden field undefined method 'menggabungkan' kesalahan

152

Saya ingin melakukan sesuatu seperti ini di rel

Inilah yang sejauh ini saya miliki di pagar:

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

Tapi kemudian saya mendapatkan kesalahan ini:

undefined method `merge' for "test":String

Bagaimana saya bisa meneruskan nilai di hidden_field saya di rails?

Jake
sumber
64
Apakah Anda akan menerima jawaban?
apneadiving

Jawaban:

417

Kamu seharusnya melakukan:

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

hidden_field mengharapkan hash sebagai argumen kedua

apneadiving
sumber
9
Agak tidak konsisten karena kami juga menulis <%= hidden_field_tag :service, "test" %>ketika tidak menggunakan form_for |f|...
Augustin Riedinger
55

Anda menggunakan hidden_field alih-alih hidden_field_tag. Karena Anda menggunakan versi non-_tag, diasumsikan bahwa controller Anda telah menetapkan nilai untuk atribut itu pada objek yang mendukung formulir. Sebagai contoh:

pengontrol:

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

melihat:

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

Ini berfungsi dengan baik di Ruby 1.9 & rails 4

<%= f.hidden_field :service, value: "test" %>
Tushar.PUCSD
sumber
3

Versi dengan sintaks baru untuk hash di ruby ​​1.9:

<%= f.hidden_field :service, value: "test" %>
Michael Durrant
sumber
2

Ini juga berfungsi di Rails 3.2.12:

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

bradmalloy
sumber
0

Omong-omong, saya tidak menggunakan bidang tersembunyi untuk mengirim data dari server ke browser. Atribut data mengagumkan. Anda dapat melakukan

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

Dan kemudian dapatkan nilai atribut dengan jquery

$('form').data('service')
Alex Teut
sumber