문제

테스트의 많은 반복을 통해 두 모델 간의 HABTM 관계를 나타내는 조인 테이블은 이러한 모델의 인스턴스가 삭제 될 때 항목을 제거하지 않는다는 것을 알았습니다. HABTM 관계가있는 모델의 인스턴스를 제거 할 때 특별한 일을해야합니까?

도움이 되었습니까?

해결책

면밀히 검사하면 HABTM 관계는 조인 테이블 항목을 제거해야합니다. 그러나이 솔루션의 원본 버전 (포스트 기록 참조)에서 설명한 HABTM 관계 나 관계는 delete 방법. ActiveRecord::Base#delete HABTM 관계가 조인 테이블에서 고아 항목을 제거하기 위해 설정하는 것과 같은 콜백을 트리거하지 않습니다. 대신 사용해야합니다 ActiveRecord::Base#destroy.

불필요한 항목을 제거하려면 원시 SQL을 사용해야합니다. 조인 모델을 만들기로 결정한 경우 조인 모델의 항목을 반복하여 연관없이 삭제할 수 있습니다.

예시:

class Foo < ActiveRecord::Base
  has_many :foo_bars, :dependent => :destroy
  has_many :bars, :through => :foo_bars
end

class FooBar < ActiveRecord::Base
  belongs_to :foo
  belongs_to :bar
end

class Bar < ActiveRecord::Base
  has_many :foo_bars, :dependent => :destroy
  has_many :foos, :through => :foo_bars
end

FooBar.all.each{|fb| fb.destroy? if fb.foo.nil? || fb.bar.nil? }

다른 팁

조인 테이블의 항목은 특별한 일을하지 않고 삭제해야합니다. 당신은 추가 할 수 있습니다 :delete_sql 이상한 상황이있는 경우 동작을 변경하는 코드 옵션. 결합의 다른쪽에있는 객체를 삭제하는 것은 기본 동작이 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top