У меня есть пара объектов virtus:
class Calculation
include Virtus.model
include ActiveModel::Validations
include ActiveModel::Model
attribute :age_ranges, Array[AgeRange], default: [{from: 16, to: 22},{from: 24, to: 30}]
end
class AgeRange
include Virtus.model
include ActiveModel::Validations
attribute :from, Integer
attribute :to, Integer
end
И я хотел бы использовать form_for
при расчете нового представления: я пробовал этот код в представлении
<%= form_for(@calculation) do |f| %>
<% @calculation.age_ranges.each do |age_range| %>
<%= f.fields_for :age_ranges, age_range do |age_range_form_builder| %>
<%= age_range_form_builder.text_field :from %>
<%= age_range_form_builder.text_field :to %>
<% end %>
<% end %>
<% end %>
но это не работает, потому что элемент ввода отображается как
<input type="text" value="16" name="calculation[age_ranges][from]">
вместо
<input type="text" value="16" name="calculation[age_ranges[][from]]">
Единственный способ, которым мне удалось это сделать, заключается в следующем:
<% @calculation.age_ranges.each do |age_range| %>
<div class="col-sm-6">
<label for="age_from">From</label>
<%= text_field("calculation", "age_ranges[][from]", value: age_range.from) %>
</div>
<div class="col-sm-6">
<label for="age_from">To</label>
<%= text_field("calculation", "age_ranges[][to]", value: age_range.to) %>
</div>
<% end %>
Есть ли способ правильно использовать form_for
здесь?