【问题标题】:Rails hidden field undefined method 'merge' errorRails隐藏字段未定义方法“合并”错误
【发布时间】: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 中传递值?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 forms 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')
            

            【讨论】:

              猜你喜欢
              • 2013-12-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-07-28
              • 2012-12-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多