2009-11-09 16 views
11

Scuse se questa è una domanda un po 'niubbo, ma in cerca di chiarire il mio pensiero su questo. Ho un modello che può anche appartenere a un modello o a un altro. Per esempio:Un modello "appartiene" a/o più di un modello?

Diciamo che avere un modello della squadra e ho un modello di membro, ed entrambi di quei modelli può avere uno BankAccount.

class Team 
    has_many :members 
    has_one :bank_account 
end 

class Member 
    belongs_to :team 
    has_one :bank_account 
end 

class BankAccount 
    belongs_to :team, :member 
end 

Per me, quanto sopra ha senso, ma mi piacerebbe chiarire questo con alcuni più esperti Rails persone? Rails ha qualche modo di capire quale sia il modello genitore di un dato conto bancario, tenendo a mente che potrebbe essere uno dei due modelli? Ad esempio, se ho chiamato @ bank_account.member su un conto bancario della squadra, si romperà?

Grazie per il vostro aiuto.

risposta

9

È possibile utilizzare un polymorphic relationship.

tuo conto bancario avrebbe la relazione polimorfica.

class BankAccount 
    belongs_to :people, :polymorphic => true 
end 

E i tuoi due (o più) di altri modelli potrebbe avere un semplice has_many relazione.

class Member 
    has_many :bank_accounts, :as => :people 
end 

nel tuo conto bancario è quindi possibile utilizzare @account.people che vi darà sia un oggetto o di MemberTeam, a seconda di quello che è.

E nel modello Member o Team, è possibile ottenere il conto bancario appropriato con @member.bank_accounts.

+0

Grazie Damien. Abbastanza semplice in realtà :) – aaronrussell

+0

Nella classe Membro, è necessario aggiungere: come =>: le persone su questo has_many. – ScottJ

+0

saperne di più su polimorfici associazioni a [guida RoR] (http://guides.rubyonrails.org/association_basics.html#polymorphic-associations) – cider

Problemi correlati