2016-10-05 3 views
1

TransactionBidAuction과 관련된 세 가지 모델이 있습니다. 경매가 생성 된 후 경매에 입찰가가 생성됩니다. 구매자가 입찰을 선택하고 체크 아웃하면 거래가 생성됩니다. 따라서 경매 및 입찰 후에 거래가 생성됩니다.레일즈 컨벤션 컨벤션

거래에는 경매와 입찰가가 연관되어 있으며 거래와 관련된 많은 정보 (예 : 배송 정보, 세금, 광고 항목 별 가격 분석)가 포함되어 있습니다. 지금 내가

거래

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

을 전환해야

? 그렇다면 어떻게? 지금 내 BidAuctiontransaction_id입니다. 그리고 내 Transactionauction_id

답변

0

입니다. 귀하의 연계는 거꾸로되어 있습니다.

경매가 먼저 생성 된 후 경매에 대한 입찰이 생성 된 경우 Bid에는 auction_id 외래 키가 필요합니다. 트랜잭션이 입찰 일련의 경매에 대한 일 후 을 만든 경우

, 당신의 Transaction는 외래 키 bid_id을해야하고, 이미 bid을 통해 암시 적 링크가 같은 auction_id 외래 키를 필요로하지 않습니다.

class Auction 
    has_many :bids 
end 

class Bid 
    belongs_to :auction 
end 

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

앞에'has_one있을 필요가 없습니다 : 입찰 모델의 transaction'

귀하의 레일 협회는 thusly 히 설치 될 것이다? – gemart

+0

@gemart '입찰'에서 (선택 사항) '거래'로 이동해야하는 경우에만 허용됩니다. 만약 그렇다면, 당신은'has_one : transaction'을 추가 할 수 있습니다, 그러나 주어진 입찰을 위해 Transaction을 찾을 필요가 없다면,'has_one'은 필요 없습니다. 당신이 양측에서 그것을 사용하지 않는다면, 협회는 양쪽에서 선언 할 필요가 없습니다. – meagar

+0

'@ bid.tx'를 호출 할 수 있어야하지만 @emagar – gemart