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


152

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

到目前为止,这是我的所有想法:

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

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

undefined method `merge' for "test":String

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


64
你会接受答案吗?
2011年

Answers:


417

你应该做:

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

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


9
这有点不一致,因为我们<%= hidden_field_tag :service, "test" %>在不使用时也会写form_for |f|...
Augustin Riedinger 2014年

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" %>


2

在Rails 3.2.12中也可以使用:

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


0

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

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

然后用jQuery获取属性值

$('form').data('service')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.