2012-09-10 1 views
0

현재 스포츠 클럽 용 앱을 개발 중이며,이를 통해 클럽 관리자는 부서, 팀 및 궁극적으로 선수를 관리 할 수 ​​있습니다. 내가 좋아하는 것이 무엇 필수many to many 데이터베이스의 가장 좋은 방법은?

class Sport < ActiveRecord::Base 
    has_many :clubs 
    has_many :teams 
    attr_accessible :club_id 


class Club < ActiveRecord::Base 
    belongs_to :sport 
    has_many :teams 
    has_many :users 
    has_many :divisions 
    attr_accessible :sport_id 

class Division < ActiveRecord::Base 
    has_many :teams 
    belongs_to :club 
    attr_accessible :club_id 

class Team < ActiveRecord::Base 
    has_many :users 
    has_many :schedules 
    belongs_to :division 
    belongs_to :club 
    attr_accessible :division_id, :club_id 

class User < ActiveRecord::Base 
    belongs_to :club 
    belongs_to :team 
    attr_accessiable :club_id, :sport_id 

이를 관리하는 더 간결한 방법은 다음과 같이 현재

나는 내 데이터베이스/관계를 가지고있다. 즉

  • 사용자는 1 개 부문 내에서 1 개 클럽에 속할 수 있지만 1 개 스포츠 내에서 1 개 클럽 내에서, 1 개 부문에 속할 수 있습니다 여러 팀
  • 을 가질 수 있지만, 여러 사용자가
  • 부문에서만 1 개 스포츠 내에서 1 개 클럽에 속해 있지만,
  • 클럽은 1 개 스포츠에 속할 수있는 여러 팀이 있지만, 여러 팀이 있고, 여러 부서 현재

위의 노력,하지만 난 할 수 그나마 생각해. elationships/구조가 액티브 협회에 대한 최선의

답변

1

회원님의 나라에 단 하나의 스포츠 클럽 만 있습니까? 독일의 여러 부문에서 각기 다른 스포츠를 운영 할 수 있습니다 (예 : 육상, 사이클, 배구, 농구, 탁구, 수영). 대부분의 앱에서 나는 스포츠와 디비전을 건너 뛰었습니다. 스포츠는 앱의 컨텍스트에서 주어지며 클럽과 디비전을 동일한 것으로 봅니다. My Athletic-App은 클럽 부문 만 다루는 것이 아니라 클럽 부문을 다루는 것입니다. 복잡성이 다른 점을 감안할 때 필요에 따라이 희생을 보게됩니다. 귀하의 마일리지는 물론 다를 수 있습니다 .-

또한 : 사용자는 일시적으로 클럽에 속하기 때문에 사용자와 팀 간의 중개 관계가 있습니다. ; 독일어로 "Startberechtigung", 영어로 "라이센스"와 같은 것, 나는 말할 것이다. 그것은 belongs_to team 및 belongs_to 사용자이고 추가 속성으로 "start_date"및 "stop_date"를가집니다. 그렇게하면 클럽과 사용자의 역사까지 있습니다. 기록 목록에 중요 (다시 : 운동 경기)!

그 후 저는 불필요한 전이 관계를 버릴 것입니다 : 사용자는 클럽에 속해있는 팀에 속해 있습니다.> has_many를 사용하십시오. 당신은 사용자 belongs_to 클럽이 필요하지 않습니다.

이제 모델이 조금 더 깨끗해질 것입니다.

업데이트 : 선수에 대한

망가 사용 클래스 이름 "사용자"이 궁극적으로 사용자/관리자 모델과 충돌로 이어질 것입니다. "Player"또는 "Athlete"는 나를 잘 해줍니다.

업데이트 2 : 물론 각각을 통해 모든 경우 :

당신은을 필요 없어요. includes 나 class 메쏘드가있는 scope가 당신에게 더 좋을 수도 있습니다. 둘 이상의 중간 클래스를 연결하려는 경우

어떻게 같은 (권장 가이드에서 구멍을 작성하시기 바랍니다)에 대한 :

class Sport < ActiveRecord::Base 

has_many :clubs 
has_many :teams, :through => :clubs, :readonly => false 


class Club < ActiveRecord::Base 

belongs_to :sport 
has_many :teams 


class Team < ActiveRecord::Base 

belongs_to :club 

has_many :athlete_teams 
has_many :athletes, :through => :athlete_teams, :readonly => false 


class AthleteTeam < ActiveRecord::Base 

belongs_to :teams 
belongs_to :athletes 


class Athlet < ActiveRecord::Base 

has_many :athlete_teams 
has_many :athletes, :through :athlete_teams, :readonly => false 
+0

감사를 달성하는 방법에 여전히 약간의 혼동 한 것 임 달성하려고하는 것은 스포츠, 클럽, 팀 및 선수들이 모두 서로 묶여 있다는 것입니다. 예를 들어, 스포츠 내 클럽 수를 볼 수 있습니다. 내가 읽은 것에 대해 : throughs 나는 운동을하려고했습니다. 할 수 있어요. 스포츠'has_many : teams, : through => : 클럽은 완전히 끝났지 만 –

+0

모든 종류의 협회를위한 최고의 소스는 http://guides.rubyonrails.org/association_basics.html :-)입니다. 진짜야. 당신이 거기에 필요한 모든 것을 찾는다. – Atastor

+1

다른 업데이트 – Atastor

0

도움말에있다이 당신을 도울 것입니다, 희망 http://api.rubyonrails.org

에서 찾을 수 있습니다.

+0

이를 읽을 수 있지만 가장 좋은 관계에게 조언 atastor에 대한 –