Rails隐藏字段出现undefined method 'merge'错误

153

我想在Rails中实现以下功能:

以下是我在Rails中的实现:

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

但是我遇到了这个错误:

undefined method `merge' for "test":String

如何在Rails中传递隐藏字段的值?

6个回答

419

你应该做:

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

hidden_field 期望第二个参数为哈希表


9
如果我们没有使用 form_for |f|,也会写成 <%= hidden_field_tag :service, "test" %>,这有点不一致。 - 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 %>

27

它在 Ruby 1.9 和 Rails 4 中运行良好

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

3

Ruby 1.9版本中哈希表新句法的版本:

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

2
这也适用于Rails 3.2.12: <% = f.hidden_field:service,:value =>“test”%>

0

顺便说一句,我不使用隐藏字段将数据从服务器发送到浏览器。 数据属性 很棒。你可以这样做

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

然后使用jQuery获取属性值

$('form').data('service')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接