2010-07-28 3 views
1

건물중인 응용 프로그램에서 이벤트가 필요합니다. 사람들은 팀을 만들거나 직접 이벤트에 등록 (팀 없음)하거나 기존 팀에 가입하여 이벤트에 등록 할 수 있습니다. 나는 원래 이벤트 has_many 팀, 팀 has_many 사용자, 사용자 belongs_to 팀 및 이벤트로 그것을 설정했습니다. 그러나 등록 된 사용자가 다른 이벤트 (또는 다른 이벤트의 팀)에 참가하려는 경우와 제어판에서 @ user.events 또는 @ user.teams와 같은 항목을 나열하려고 할 때 문제가 발생할 것으로 예상됩니다. 누군가가 조인 테이블을 사용하고 이들을 조인하기 위해 등록 모델/마이그레이션을 생성 할 것을 제안했습니다. 이벤트, 팀 및 사용자에 속한 조인 모델을 사용할 수 있습니까? 나는이 모든 잘못에 접근하고 있는가?레일이 테이블 또는 HABTM 연결을 연결합니다.

답변

2

조인 모델 등록을 생성하고 belongs_to 다형성을 만들어 모든 유형의 객체를 참조 할 수 있습니다.

모델/team.rb :

class Team < ActiveRecord::Base 
    has_many :registrations, :as => :owner 
end 

모델/user.rb

class User < ActiveRecord::Base 
    has_many :registrations, :as => :owner 
end 

모델/registration.rb

class Registration < ActiveRecord::Base 
    belongs_to :owner, :polymorphic => true 
end 

모델/event.rb 다음은 예입니다

class Event < ActiveRecord::Base 
    has_many :registrations 
end 

데시벨/마이그레이션/1234_add_registrations.rb

... 
t.belongs_to :owner, :polymorphic => true 
t.belongs_to :event 
... 

이제 이벤트에 가입 사람을 확인하기 위해 등록을 들여다 볼 수 있습니다. 사용자에게 돌아가려면 has_many : events, : through => : registrations, : source => : 소유자를 사용할 수 있지만 has_many : owners, : through => : registrations와 같은 몇 가지 제한 사항이 있습니다. 플러그인은 has_many_polymorphs입니다.