Rails 协会公约

Rails Association Convention

与这个问题相关的模型有三个 Transaction BidAuction。创建拍卖,然后显然在该拍卖中创建出价。一旦买家选择了出价并结账,就会创建交易,因此在拍卖和出价之后。

交易与拍卖和投标有关联,并包含大量有关交易的信息(即运输信息、税收、按项目分类的价格明细)。现在我有

交易

class Transaction < ActiveRecord::Base
    has_one :auction
    has_one :bid

出价

class Bid < ActiveRecord::Base
    belongs_to :tx, class_name: "Transaction", foreign_key: "transaction_id"

拍卖

class Auction < ActiveRecord::Base
    belongs_to :tx, class_name: "Transaction", foreign_key: "transaction_id"

我的belongs_tohas_one应该调换吗?如果是这样怎么办? 现在我的 BidAuction 有一个 transaction_id。我的 Transaction 有一个 auction_id

你的联想是倒退的。

如果先创建拍卖,然后为拍卖创建出价,那么您的 Bid 需要一个 auction_id 外键。

如果在 一系列拍卖出价后创建交易,您的 Transaction 应该有一个外键 bid_id,并且没有需要一个 auction_id 外键,因为已经有一个隐式的 link 通过 bid.

您的 Rails 关联将这样设置:

class Auction
  has_many :bids
end

class Bid
  belongs_to :auction
end

class Transaction
  belongs_to :bid
  has_one :auction, through: :bid
end