2009-11-09 16 views
11

Disculpas si esta es una pregunta ligeramente novato, pero buscando aclarar mis pensamientos sobre esto. Tengo un modelo que puede pertenecer a una u otra modelo. Por ejemplo:¿Puede un modelo "belongs_to" cualquiera o más de un modelo?

Digamos que tengo un modelo de equipo y un modelo de miembro, y ambos modelos pueden tener una cuenta bancaria.

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 

Para mí, lo anterior tiene sentido, pero me encantaría aclarar esto con algunas personas Rieles con más experiencia? ¿Tiene Rails alguna forma de determinar cuál es el modelo principal de una cuenta bancaria determinada, sin olvidar que podría ser uno de los dos modelos? Por ejemplo, si llamé a @ bank_account.member en una cuenta bancaria del equipo, ¿arrojará un tambaleante?

Gracias por su ayuda.

Respuesta

9

Puede usar polymorphic relationship.

Su cuenta bancaria tendría la relación polimórfica.

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

Y sus dos (o más) de otros modelos tendrían un simple has_many relación.

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

En su cuenta bancaria a continuación, puede utilizar @account.people que le dará ya sea un objeto o MemberTeam, dependiendo de lo que es.

Y en su modelo Member o Team, puede obtener la cuenta bancaria apropiada con @member.bank_accounts.

+0

Gracias Damien. Muy simple realmente :) – aaronrussell

+0

Miembro de la clase, debe agregar: as =>: personas en esa has_many. – ScottJ

+0

Lea más sobre Asociaciones polimórficas en [guía RoR] (http://guides.rubyonrails.org/association_basics.html#polymorphic-associations) – cider

Cuestiones relacionadas