2016-10-05 13 views
1

Es gibt drei Modelle, die für diese Frage relevant sind TransactionBid und Auction. Eine Auktion wird erstellt und dann werden in dieser Auktion offensichtlich Gebote erstellt. Eine Transaktion wird erstellt, sobald der Käufer ein Gebot ausgewählt und ausgecheckt hat, also nach Auktion und Gebot.Rails Association Convention

Die Transaktion ist mit der Auktion und dem Gebot verknüpft und enthält viele Informationen zur Transaktion (dh Versandinformationen, Steuern, Preisaufschlüsselung nach Werbebuchung). Im Moment habe ich bekam

Transaktion

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

Bid

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

Auktion

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

Sollte mein belongs_to und has_one geschaltet werden? Wenn das so ist, wie? Jetzt haben meine Bid und Auction eine transaction_id. Und meine Transaction hat eine auction_id

Antwort

0

Ihre Verbände sind rückwärts. Wenn eine Auktion zuerst erstellt wird und dann Gebote für eine Auktion erstellt werden, benötigt Ihr Bid einen auction_id Fremdschlüssel.

Wenn eine Transaktion nach eine Reihe von Angeboten für eine Auktion passieren erstellt wird, Ihre Transaction sollte einen Fremdschlüssel bid_id haben, und keine auction_id Fremdschlüssel benötigen, da es bereits eine implizite Verbindung durch die bid ist.

Verbände würden Ihre Rails dann Setup thusly sein:

class Auction 
    has_many :bids 
end 

class Bid 
    belongs_to :auction 
end 

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

Es braucht nicht eine 'has_one zu sein: transaction' im Bid-Modell? – gemart

+0

@gemart Nur wenn Sie in der Lage sein müssen, von einem "Bid" zu seiner (optionalen) "Transaction" zu wechseln. Wenn Sie dies tun, können Sie eine "has_one: transaction" hinzufügen, aber wenn Sie die Transaktion für ein gegebenes Gebot nie nachschlagen müssen, ist das 'has_one' nicht notwendig. Verbände müssen nicht auf beiden Seiten deklariert werden, es sei denn, Sie beabsichtigen, sie auf beiden Seiten zu verwenden. – meagar

+0

Ich muss '@ bid.tx' anrufen können, aber ich kann nicht @meagar – gemart