Rails trường ẩn không xác định phương thức 'hợp nhất' lỗi


152

Tôi muốn làm một cái gì đó như thế này trong đường ray

Đây là những gì tôi có cho đến nay trong đường ray:

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

Nhưng sau đó tôi gặp lỗi này:

undefined method `merge' for "test":String

Làm cách nào tôi có thể chuyển các giá trị trong hidden_field trong rails?


64
Bạn có chấp nhận một câu trả lời không?
bắt đầu

Câu trả lời:


417

Bạn nên làm:

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

hidden_field mong đợi một hàm băm như một đối số thứ hai


9
Nó không nhất quán khi chúng tôi cũng viết <%= hidden_field_tag :service, "test" %>khi không sử dụng form_for |f|...
Augustin Riedinger

55

Bạn đang sử dụng hidden_field thay vì hidden_field_tag. Vì bạn đang sử dụng phiên bản không phải là _tag, nên giả sử rằng bộ điều khiển của bạn đã đặt giá trị cho thuộc tính đó trên đối tượng sao lưu biểu mẫu. Ví dụ:

bộ điều khiển:

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

lượt xem:

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

27

Nó hoạt động tốt trong Ruby 1.9 & rails 4

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

3

Một phiên bản với cú pháp mới cho băm trong ruby ​​1.9:

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

2

Điều này cũng hoạt động trong Rails 3.2.12:

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


0

Nhân tiện, tôi không sử dụng các trường ẩn để gửi dữ liệu từ máy chủ đến trình duyệt. Thuộc tính dữ liệu là tuyệt vời. Bạn có thể làm

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

Và sau đó nhận giá trị thuộc tính với jquery

$('form').data('service')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.