Rails 隐藏字段未定义方法“ merge”错误

我想在铁轨上做这样的事

以下是我目前在铁路方面的发现:

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

但是我得到了这个错误:

undefined method `merge' for "test":String

我如何在 Rail 中传递我的 hide _ field 中的值?

82049 次浏览

你应该这样做:

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

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

您使用的是 hide _ field 而不是 hide _ field _ tag。因为您使用的是非 _ tag 版本,所以假定您的控制器已经在支持表单的对象上设置了该属性的值。例如:

控制器:

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

观点:

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

Ruby 1.9中新的散列语法版本:

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

这也适用于 Rails 3.2.12:

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

顺便说一下,我不使用隐藏字段从服务器发送数据到浏览器。数据属性太棒了。你可以的

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

然后使用 jquery 获取属性值

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

它在 Ruby 1.9和 Rails4中运行良好

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