Предполагая, что у меня есть что-то вроде этого:Как сохранить недавно созданные связанные модели с помощью Sequel?
# Schema:
DB.create_table :transactions do
primary_key :id
foreign_key :card_id, :cards
Integer :amount
end
DB.create_table :cards do
primary_key :id
foreign_key :transaction_id, :transactions
Intger :number
end
# Models:
class Transaction < Sequel::Model
one_to_one :card
end
class Card < Sequel::Model
one_to_one :transaction
end
Как сделать эту работу таким образом, что она экономит trans
, card
и их соответствующие ассоциации?
trans = Transaction.new(:amount => 100)
card = Card.new(:number => 4000500060007000)
trans.card = card
trans.save
Как можно заметить, это не работает, потому что card
не сохраняется первым, и Sequel бросает ошибку «первичный ключ». Если я сначала сохраню card
, он не получит идентификатор transaction
.
В принципе, я пытаюсь избежать этого:
# Save without associations first, but this will assign primary keys
trans.save
card.save
# Now, manually create associations
trans.card = card
card.trans = trans
# Re-save again, this time with associations
trans.save
card.save
Спасибо, но я ищу решение, которое не меняет ассоциации объектов с '1: 1' на' 1: many'. –
Почему бы просто не объединить таблицу? Если отношение равно 1: 1 и 1: 1, то нет причин не создавать таблицу с обоими наборами столбцов - она будет представлять одни и те же данные. –
Этот пример тривиален, и я использовал его для иллюстрации проблемы. Фактические модели намного сложнее. –