2009-06-19 3 views
1

팀/팀 멤버십을 모델링하는 더 나은 방법에 대한 피드백을 얻고 싶습니다. 나는 그가 회원에 모두 있다고 그는 팀을 소유하고 있음을 유지해야하기 때문에모델링 팀

class User 
    has_many :teams, :foreign_key => "owner_id" #user owns this team 
    has_many :memberships #user is a member of these teams 


class Team 
    belongs_to :team_administrator, :class_name => "User", :foreign_key => "owner_id" 
    has_many :memberships 

class Membership 
    belongs_to :team 
    belongs_to :user 

나는 팀 관리자 부분을 좋아하지 않는다 :
나는 현재 다음있다. 어쩌면 is_administrator 속성이 Membership 인 것이 더 좋을까요?

이 모델의 또 다른 문제점은 UserA가 UserB가 소유하고있는 팀의 구성원인지 확인하는 좋은 방법을 찾기 위해 애를 먹고 있다는 것입니다. 현재 수행 중입니다.

여기서 membership_id는 current_user에 속한 팀의 구성원인지 확인하려고하는 사용자를 포함하는 멤버십입니다.

그럼 누구나이 모델을 만드는 더 좋은 방법이 있을까요?

어떤 조언을 주셔서 감사합니다!

편집 :

class User 
    has_many :teams, :as => team_administrator, :foreign_key => "owner_id" 
    has_many :teams, :through => :memberships #user is a member of these teams 
    has_many :memberships 

class Team 
    belongs_to :team_administrator, :polymorphic => true, :foreign_key => "owner_id" 
    has_many :users, :though => memberships 

class Membership 
    belongs_to :team 
    belongs_to :user 

:는 사용자가 실제로 당신이 필요로하는 다형성

@membership = current_user.membership.find(params[:membership_id], :joins => :team) 
+0

사용자가 한 팀만있는 경우 회원 테이블/모델이 실제로 필요하지 않습니다. 멤버십이 팀과 관련하여 해당 사용자에 대한 정보를 저장하는 곳이 아니면 yes is_administrator를 저장해야합니다. – ErsatzRyan

+0

아마도 내가 분명히 말했듯이, 사용자는 나에게 여러 팀의 회원/소유자가 될 수 있습니다. – neiled

답변

1

의 소유자/구성원이 될 수 있습니다 사용자 A가 B 팀에 속하는지 여부를 확인하려면

b = User.find_by_name("B") 
a = User.find_by_name("A") 
a.teams.find_by_owner_id(b.id) 
+0

감사합니다. 실제로이 경우 회원 ID는 소유자와 팀이 아닌 사용자와 팀 간의 회원 자격이므로 회원 자격이 없으므로 회원 자격이 없습니다. – neiled

4

인 회원에게 다른 방법을 찾아 여러 팀