Рельсы 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: '...' %>
Другие вопросы по тегам