【问题标题】:rails f.number_field vs number_field_tagrails f.number_field vs number_field_tag
【发布时间】:2019-02-27 09:11:02
【问题描述】:

我正在处理这个表单,试图填充我的值哈希并通过参数将其发送到我的控制器:

<%= form_for(cash_count) do |f| %>
   ....
   <%= f.label "200 bills", :class => "input-group-addon" %>
   <%= number_field_tag "vals[b200]", :class => "form-control" %>

如果我理解正确,number_field_tag 在 params 中发送字段结果对(工作正常),f.number_field 在 params.cash_count 中发送字段结果对(可以不要让它工作)。

我不能用 f.number_field 做到这一点。

我在努力

<%= f.number_field 'vals["b200"]', :class => "form-control" %>

我得到了

undefined method `vals["b200"]' for #<CashCount:0x007f371a756068> 

虽然在 irb 中这种语法似乎是正确的:

2.4.0 :028 > d = CashCount.new 

2.4.0 :029 > d.vals = c.vals

2.4.0 :031 > d.vals
 => {"b200"=>"3"} 

2.4.0 :033 > d.vals["b200"]
 => "3"   

澄清:我首先使用另一个名称 - “值”的“vals”列发布了这个问题。我遇到了一些问题,因为它类似于 Hash.values 方法,所以我将其更改为“vals”。

【问题讨论】:

  • values 的列类型是什么?
  • t.text "值"

标签: ruby-on-rails forms hash form-for


【解决方案1】:

您可以使用value 参数来预填充输入值

<%= f.number_field :my_attribute, value: f.object.values['b200'], class: '...' %>

【讨论】:

    【解决方案2】:

    如果您真的想使用 number_field 而不是 number_field_tag,这将起作用,在内部,这些帮助器的实现略有不同

    <%= form_for(cash_count) do |f| %>
        ....
        <%= f.label "200 bills", :class => "input-group-addon" %>
        <%= f.fields_for :values do |n|%>
            <%= n.number_field :b200 , :class => "form-control" %>
        <% end %>
    <% end %>
    

    输出类似于

    "cash_count" => {"values" => {"b200" => "3"}}
    

    【讨论】:

    • 谢谢!它现在确实以正确的方式传递给控制器​​(我认为),我的 cash_count_params 是这样的:code"cash_count"=><:parameters>"1", "expected_total"=> "111", "values"=><:parameters>"2"} allowed: true>} allowed: true>code 但是 - "values" 参数仍然没有保存到数据库,我应该手动获取哈希键值对并手动构建值哈希吗?
    • 很高兴得到帮助。
    • 我不确定控制器中的模型关联和强参数配置。尝试使用任何工具如 pry 进行调试,看看有什么错误。
    • 好的,我已经成功地保存和检索了 cash_count 对象。在我加载它进行编辑后,它看起来像这样:--- #"3", "b100"=>"4"},...... 问题:我的表单在编辑时不显示 vals 当前值(表单输入已按照您的建议实现)。其余的输入都很好——有什么想法吗?或者更好,我该如何调试这样的问题?
    • 如果我的理解是正确的,vals 是 CashCount 表中带有哈希值的列。除非两者之间存在关联,否则您需要循环并显示哈希中的值(无默认机制)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多