Rails隐藏字段未定义方法“合并”错误
Posted
技术标签:
【中文标题】Rails隐藏字段未定义方法“合并”错误【英文标题】:Rails hidden field undefined method 'merge' error 【发布时间】:2011-10-01 23:41:10 【问题描述】:我想在 Rails 中做这样的事情
这是我目前在 Rails 中所拥有的:
<%= form_for @order do |f| %>
<%= f.hidden_field :service, "test" %>
<%= f.submit %>
<% end %>
然后我得到这个错误:
undefined method `merge' for "test":String
如何在 rails 的 hidden_field 中传递值?
【问题讨论】:
【参考方案1】:你应该这样做:
<%= f.hidden_field :service, :value => "test" %>
hidden_field
需要一个散列作为第二个参数
【讨论】:
这有点不一致,因为我们在不使用form_for |f|
时也会写 <%= hidden_field_tag :service, "test" %>
...【参考方案2】:
您使用的是 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 %>
【讨论】:
【参考方案3】:它在 Ruby 1.9 和 rails 4 中运行良好
<%= f.hidden_field :service, value: "test" %>
【讨论】:
【参考方案4】:在 ruby 1.9 中具有新哈希语法的版本:
<%= f.hidden_field :service, value: "test" %>
【讨论】:
【参考方案5】:这也适用于 Rails 3.2.12:
<%= f.hidden_field :service, :value => "test" %>
【讨论】:
【参考方案6】:顺便说一句,我不使用隐藏字段将数据从服务器发送到浏览器。 Data attributes 太棒了。你可以这样做
<%= form_for @order, 'data-service' => 'test' do |f| %>
然后用jquery获取属性值
$('form').data('service')
【讨论】:
以上是关于Rails隐藏字段未定义方法“合并”错误的主要内容,如果未能解决你的问题,请参考以下文章