@krokodily

Как сделать форму с динамическим добавлением полей для дочерних объектов, если у двух дочерних объектов есть еще и общий дочерний объект?

Есть четыре модели:
class Festival < ActiveRecord::Base
  has_many :deadlines
  has_many :categories
end

class Deadline < ActiveRecord::Base
  belongs_to :festival
  has_many :fees
end

class Category < ActiveRecord::Base
  belongs_to :festival
  has_many :fees
end

class Fee < ActiveRecord::Base
  belongs_to :deadline
  belongs_to :category
end


Делаю форму для Festival, внутри которой поля для дочерних объектов.

<%= form_for @festival do |festival_form| %>

  <div id="deadlines_fields">
    <%= festival_form.fields_for :deadlines do |deadline_fields| %>
      <%= render 'deadline_fields', f: deadline_fields %>
    <% end %>
  </div>

  <%= link_to_add_association '', festival_form, :deadlines %>


  <div id="categories_fields">
    <%= festival_form.fields_for :categories do |category_fields| %>
      <%= render 'category_fields', f: category_fields %>
    <% end %>
  </div>

  <%= link_to_add_association '', festival_form, :categories %>

<% end %>


<!--deadline_fields.html.erb-->
<div class="nested-fields">
  <%= f.text_field :name %>
  <%= f.date_field :date %>
  <%= link_to_remove_association '', f %>
</div>


<!--category_fields.html.erb-->
<div class="nested-fields">
  <%= f.text_field :name %>
  <%= link_to_remove_association '', f %>

  <div id="fees_fields">
    <%= f.fields_for :fees do |fee_fields| %>
      <%= render 'fee_fields', f: fee_fields %>
    <% end %>
  </div>
</div>


<!--fee_fields.html.erb-->
<div class="nested-fields">
  <p><%= f.object.deadline.name %>:</p>
  <%= f.number_field :price %>
</div>


Мне нужна следующая логика в форме. При добавлении Dedline, должны добавться Fee в каждую Category. При отправке формы, Category сохраняются нормально, Fee вложенные в Category тоже сохраняются правильно, но у Fee нет deadline_id. Что сделать чтобы Fee сохранялись одновременно как потомок Category и как потомок Deadline?

По идее для этого нам нужно скрытое поле с name="festival[categories_attributes][0][fees_attributes][0][dedline_id]", но пока форма не отправлена, deadline_id еще не присвоен. Что делают в таком случае?

Update. Перечитал свой вопрос, возможно непонятно написал что должно происходить в форме. link_to_add_association и link_to_remove_association это хелперы которые рендерят ссылку, при нажатии на которую добавляются/удаляются поля для нового объекта. При добавлении полей для Deadline, должны добавится новые поля для Fee. Каким образом в новых полях для Fee указать что этот новый Fee должен принадлежать новому Deadline?
  • Вопрос задан
  • 263 просмотра
Пригласить эксперта
Ответы на вопрос 2
AngularJS
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы