Rails隐藏字段未定义的方法“合并”错误

我想在轨道上做这样的事情

这是我迄今在轨道上:

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

但是,然后我得到这个错误:

 undefined method `merge' for "test":String 

我如何在rails中的hidden_​​field中传递值?

你应该做:

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

hidden_field期望散列作为第二个参数

您正在使用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 %> 

它在Ruby 1.9和rails 4中工作正常

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

在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')