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| 时也会写 &lt;%= hidden_field_tag :service, "test" %&gt; ...【参考方案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:

&lt;%= f.hidden_field :service, :value =&gt; "test" %&gt;

【讨论】:

【参考方案6】:

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

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

然后用jquery获取属性值

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

【讨论】:

以上是关于Rails隐藏字段未定义方法“合并”错误的主要内容,如果未能解决你的问题,请参考以下文章

未定义的方法“自动完成”rails 3和jquery

外部模块中的 Rails Resque 未定义方法错误

Rails NoMethodError:未定义的方法“紧凑”错误

Rails中公共活动gem的未定义方法错误

rails中未定义的方法`devise_for'

为啥 x-editable-rails gem 会抛出错误:未定义的方法 `xeditable?'?