fields_for и PORO (Virtus) в Rails - PullRequest
       3

fields_for и PORO (Virtus) в Rails

0 голосов
/ 07 февраля 2019

У меня есть пара объектов 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 здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...