2012-11-26 5 views
0

시즌 두 팀의 팀을 보유하고있어 팀이 많은 시즌에 속할 수 있으며 각 시즌에도 많은 팀이 참여할 수 있습니다. 지금까지 ID 속성없이 조인 테이블 seasons_teams를 사용하는 모델간에 간단한 HABTM 관계를 사용했습니다.HABTM 라이프 사이클 후크

이제 팀이 시즌에서 탈락했을 때 실행되도록 연관을 삭제할 때 후크를 추가하고 싶습니다. 이 작업을 수행하는 가장 좋은 방법은 HABTM 연관을 has_many/: 물마루로 변환하고 ID 특성을 조인 테이블에 추가 한 다음 새로운 before_destroy 후크를 포함 할 해당 모델 파일을 만드는 것입니다. 그렇다면 자동 증가 인덱스를 조인 테이블에 추가하기 위해 마이그레이션을 어떻게 작성합니까? Rails Style Guide 다음

+0

id 필드를 추가하지 않는 조인 테이블 마이그레이션에서 명시 적으로 정의 했습니까? –

+0

예 : create_table : seasons_teams, : id => false do | t | .... –

답변

3

(아니면 인덱스 새로운 조인 테이블/모델을 만들기 위해 더 나은 것하고 기존 테이블의 모든 항목을 복사하기) :

은 has_many 선호 : has_and_belongs_to_many까지. has_many 사용 : 통해하는 추가 속성검증 가 귀하의 경우에는 모델

에 가입 할 수 있습니다 :

class SeasonTeam < ActiveRecord::Base # couldn't find a better name... 
    belongs_to :team 
    belongs_to :season 
    # the validates are not mandatory but with it you make sure this model is always a link between a Season and a Team 
    validates :team_id, :presence => true 
    validates :season_id, :presence => true 

    before_destroy :do_some_magic 

    #...  
end 

class Season < ActiveRecord::Base 
    has_many :teams, :through => :season_teams 
end 

class Team < ActiveRecord::Base 
    has_many seasons, :through => :season_teams 
end 
+0

네, 고마워요. 이것이 내가 생각한 것입니다. 그것은 작동합니다. 조인 테이블을 대체 할 완전히 새로운 테이블을 생성하고 마이그레이션시 기존 테이블의 모든 데이터를 복사했습니다. –

0

또한 레일 'Association Callbacks 볼 수 있었다. 비헤이비어를 사용자 정의하는 데 사용할 수있는 before_removeafter_remove 콜백 메소드를 제공합니다.