2009-11-09 9 views
11

Przepraszam, jeśli jest to pytanie typu noob, ale staram się wyjaśnić moje zdanie na ten temat. Mam model, który może EITHER należą do jednego lub innego modelu. Na przykład:Czy model "belongs_to" może być jednym lub więcej niż jednym modelem?

Załóżmy, że mam model Team i mam model Member, a oba te modele mogą mieć jeden 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 

Dla mnie powyższe ma sens, ale chciałbym wyjaśnić to z bardziej doświadczonymi ludźmi z Railsów? Czy Rails ma jakiś sposób sprawdzenia, jaki model macierzysty ma dany BankAccount, biorąc pod uwagę, że może to być jeden z dwóch modeli? Na przykład, jeśli zadzwoniłem na @ bank_account.member na konto bankowe zespołu, czy wyrzuci to chwiejnie?

Dzięki za pomoc.

Odpowiedz

9

Można użyć numeru polymorphic relationship.

Twoje konto bankowe będzie miało relację polimorficzną.

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

A twoje dwie (lub więcej) inne modele miałby prostą has_many relację.

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

na koncie bankowym można następnie wykorzystać @account.people które dadzą Ci albo Member lub Team obiektu, w zależności od tego, co to jest.

W swoim modelu Member lub Team można uzyskać odpowiednie konto bankowe pod numerem @member.bank_accounts.

+0

Dzięki Damien. Całkiem proste naprawdę :) – aaronrussell

+0

W klasie Członek, musisz dodać: as =>: osób na tym has_many. – ScottJ

+0

Więcej informacji na temat stowarzyszeń polimorficznych można znaleźć na stronie [Poradnik RoR] (http://guides.rubyonrails.org/association_basics.html#polymorphic-association) – cider