1

假设我有这样的事情:

# 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's id。

基本上,我试图避免这种情况:

# 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
4

1 回答 1

3

您可能想尝试将关联类型更改为更像:

# Schema:
DB.create_table :transactions do
    primary_key :id
    Integer     :amount
end
DB.create_table :cards do
    primary_key :id
    foreign_key :transaction_id, :transactions
    Integer      :number
end

# Models:
class Transaction < Sequel::Model
    one_to_many :card
end
class Card < Sequel::Model
    one_to_one :transaction
end

现在您创建为:

trans = Transaction.new(:amount => 100)
trans.save
trans.add_card(:number => 4000500060007000)

这将允许所有相同的选项以及允许(但肯定不要求)将交易拆分到多张卡上。

于 2013-07-04T04:48:12.163 回答