2009-11-09 2 views
11

Извините, если это вопрос немного нуба, но я хочу прояснить свои мысли по этому поводу. У меня есть модель, которая может принадлежать одной модели или другой. Например:Может ли модель «принадлежит_to» либо/или более, чем одна модель?

Предположим, у меня есть модель Team, и у меня есть модель Member, и обе модели могут иметь один 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 

Для меня это имеет смысл, но я хотел бы прояснить это с помощью более опытных людей Rails? Есть ли у Rails какой-либо способ определить, какая исходная модель имеет какой-либо данный BankAccount, не имея в виду, что это может быть одна из двух моделей? Например, если я позвонил @ bank_account.member на банковский счет Team, будет ли он бросить шаткий?

Благодарим за помощь.

ответ

9

Вы можете использовать polymorphic relationship.

Ваш банковский счет будет иметь полиморфное отношение.

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

И ваши два (или более) другие модели будут иметь простой has_many отношение.

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

В вашем банковском счете вы можете использовать @account.people, который даст вам или Member или Team объект, в зависимости от того, что он есть.

И в вашей модели Member или Team вы можете получить соответствующий банковский счет @member.bank_accounts.

+0

Спасибо Damien. Довольно просто на самом деле :) – aaronrussell

+0

В классе Member вам нужно добавить: as =>: people on that has_many. – ScottJ

+0

Подробнее о Полиморфных ассоциациях в [Руководстве по RoR] (http://guides.rubyonrails.org/association_basics.html#polymorphic-associations) – cider

Смежные вопросы