Я работаю над этой проблемой уже несколько дней, и другие сообщения о переполнении стека, которые я просмотрел, либо очень старые, либо не совсем то, что мне нужно.
Проблема:
Участвуют три модели:
Поездка – представляет собой поездку и связанную с ней информацию. ПРИМЕЧАНИЕ. Не содержит никакой информации о членах экипажа.
Веха — представляет собой действие, предпринятое в поездке (для целей этой задачи, когда член экипажа садится или высаживается).
Член экипажа — представляет одного члена экипажа в поездке, у каждого члена экипажа есть контрольная точка посадки и высадки, которую можно разделить с другими членами экипажа, если они отправляются или высаживаются в одном и том же месте. Участники экипажа связаны с вехами как по embark_milestone_id, так и по disembark_milestone_id.
Сейчас я работаю над формой, в которой пользователь может редактировать всю информацию о поездке, в том числе о том, какие члены экипажа присутствуют в поездке, каковы их роли и где они отправляются/высаживаются. Поездка редактируется, поэтому вся страница завернута в конструктор form_for.
Сегмент страницы, который редактирует CrewMembers, обернут в конструктор fields_for. Модель Trips настроена на прием вложенных атрибутов модели CrewMember. Количество членов экипажа является переменным, и информация о каждом из них должна редактироваться отдельно (поэтому я не могу использовать select_tags, насколько мне известно). Это прекрасно работает для отображения членов экипажа в представлении, но не работает, когда я на самом деле пытаюсь обновить, потому что CrewMembers связаны с вехами как через embark_milestone_id, так и через disembark_milestone_id, а не простоmilestone_id.
Вопрос:
Имея все это в виду, есть ли способ «научить» рельсы распознавать CrewMembers через Milestones из формы поездки либо по embark_milestone_id, либо по disembark_milestone_id, либо по обоим?
У меня сложилось впечатление, что это не способ «Rails» сделать что-то подобное, но я хотел опубликовать эту идею в сообществе, прежде чем переходить к более сложному обходному пути.
Любые советы высоко ценится. Спасибо за уделенное время.
Код модели по запросу:
class CrewMember < ApplicationRecord
belongs_to :guide
belongs_to :milestone
end
class Trip < ApplicationRecord
belongs_to :launch_slot, required: true
has_many :milestones
has_many :places, through: :milestones
has_many :crew_members, through: :milestones, foreign_key: embark_milestone_id
accepts_nested_attributes_for :milestones
accepts_nested_attributes_for :crew_members
end
class Milestone < ApplicationRecord
belongs_to :trip
belongs_to :place
has_many :crew_members
end