Использование модели соединения с вложенной формой (has_many: сквозные отношения)
У меня есть Form_for для модели Show. Я хотел бы использовать fields_for внутри form_for для добавления полос. Дело в том, что я не хочу привязывать поля к полосам при использовании формы для обновления записей. Если название группы изменится, я бы хотел обновить представление новой группой.
Шоу объединяются с группами через спектакли
class Show < ActiveRecord::Base
has_many :performances
has_many :bands, through: :performances
accepts_nested_attributes_for :bands
end
class Band < ActiveRecord::Base
attr_accessible :name, :website, :country, :state
has_many :performances
has_many :shows, through: :performances
validates :name, presence: true, uniqueness: true
end
class Performance < ActiveRecord::Base
attr_accessible :show, :band
belongs_to :show
belongs_to :band
end
Вот моя форма. (Упрощенный)
<%= form_for @show do |f| %>
#fields
<%= f.fields_for :bands do |b| %>
<%= b.text_field :name %>
<% end %>
<%end>
Проблема в том, что если это используется для изменения названия группы, это меняет название группы (безумно, верно?). Я не хочу, чтобы он обновлял запись группы - я хочу, чтобы она выполняла Band.find_or_create и обновляла запись исполнения с идентификатором новой группы. Таким образом, пользователи могут заменить группу в шоу, удалив имя и добавив другое имя группы.
Рендеринг HTML должен включать в себя идентификатор производительности, а не идентификатор группы (я думаю)
Что-то вроде:
<input id="show_performance_attributes_1_id" name="show[performance_attributes][1][id]" type="hidden" value="62">
Как это сделать?
1 ответ
Итак, я смог найти решение своего вопроса. Возможно, я не предоставил достаточно деталей в исходном вопросе.
Но решение состоит в том, чтобы просто использовать модель производительности в качестве вложенного поля в Fields_for
вместо модели полос. Измените модель шоу на accepts_nested_attributes_for performances
и измените модель производительности на accepts_nested_attributes_for band