Я оказался в следующей полунормальной ситуации:
class Contract
has_many :contract_locations, dependent: :destroy
has_many :locations, through: :contract_locations
end
class ContractLocation
enum role: { shipper: 0, receiver: 1 }
belongs_to :contract
belongs_to :location
end
class Location
has_many :contract_locations, dependent: :destroy
has_many :contracts, through: :contract_locations
end
Форма, о которой идет речь, - это форма Contract
, которая отлично работает в ситуации, когда для каждого связанного местоположения я выбираю местоположение и роль. Архитектурно это работает, но поскольку у меня фактически есть два Location
"типа" (:shipper
и :receiver
), я бы хотел, чтобы они были двумя отдельными частями формы. Таким образом, по сути, это раздел формы со своей кнопкой «Добавить место доставки» и другой раздел со своей кнопкой «Добавить место получения». Я могу достичь этого, но проблема, которую он вызывает, заключается в том, что форма заполняется из существующих отношений. Если я отправлю форму, как это:
И я снова загружаю форму редактирования, значения заполняются так:
Очевидно, это потому, что кокон просто заполняет ассоциированные Location
с, как он должен, и не различает Location
с конкретными role
с. Существуют ли какие-либо области видимости, которые позволили бы мне создавать эти элементы формы только для Location
s для некоторой конкретной области (как в role: :shipper
)?
РЕДАКТИРОВАТЬ: я должен заметить, что я пытался использовать предоставленные обратные вызовы Javascript, в частности before-insert
, но не похоже, что они срабатывают при первой загрузке формы.