2010-05-10 2 views

답변

18

그래, 지원하지 않습니다. See the docs. 일반적으로 habtm은 매우 간단한 경우에만 사용되며 더 복잡한 작업이 필요한 경우 has_many :through으로 전환해야합니다. 당신이 간단한 has_and_belongs_to_many 협회에 유지하려면

73

, 당신은이를 추가 할 수 있습니다 : 그 person의 모든 항목의 조인 테이블을 삭제합니다

class Person < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
    before_destroy { posts.clear } 
end 

합니다. 참고 :이 작업은 조인 테이블에서 레코드 만 제거하며 posts은 삭제하지 않습니다. post이 다른 persons에 의해 참조 될 수 있으므로 양방향 has_and_belongs_to_many 인 경우 의미가 있습니다.

는하지만 당신의 이름 ( PersonPost)에서 추측 난 당신이 아마 멀리 Person has_many :posts하고 has_many 협회에 :dependent => :destroy을 사용할 수있는 경우에 Post belongs_to :person로 얻을 수 있다고 가정한다.

+1

** 같은 모델 **에 링크 된 ** 양방향 **'has_and_belongs_to_many' 관계에'dependent : : destroy' 액션을 구현하는 방법을 추가 할 수 있습니까? – JJD

+4

구문이 원래이 답변과 같은지 확실하지 않지만 레일 4에서 'before_destroy {posts.clear}'라고되어 있습니다. – mkralla11

+1

감사합니다. 'before_destroy'가되도록 편집했습니다. –

1

이 시도 :

class Person < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
    before_destroy do 
    posts.each { |post| post.destroy } 
    end 
end 

당신은 레일로 posts.clear 할 필요가 없습니다 4.2 이상이 이미 처리합니다.

관련 문제