Рельсы f.number_field против number_field_tag
Я работаю над этой формой, пытаюсь заполнить мои значения Hash и отправить ее через параметры моему контроллеру:
<%= 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 ответа
Это будет работать, если вы действительно хотите использовать 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"}}
Вы можете использовать value
параметр для предварительного ввода входных значений
<%= f.number_field :my_attribute, value: f.object.values['b200'], class: '...' %>