rails f.number_field与number_field_tag

时间:2019-02-27 09:11:02

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

我正在处理此表单,尝试填充我的值Hash并将其通过params发送到我的控制器:

<%= 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”列的另一个名称-“ values”发布了此问题。我遇到了一些问题,因为它类似于Hash.values方法,因此我将其更改为“ vals”。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果您真的想使用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"}}