2011-02-16 2 views
11

사용자가 많은 역할을 담당하는 관계가 있다고 가정 해 보겠습니다. 사용자를 파기하면 조인 테이블의 레코드도 자동으로 제거됩니까? 아니면 dependency => : destroy를 사용해야합니까? 역할을 파괴하면 어떨까요?HABTM 연결에서 자동으로 결합 테이블의 레코드가 삭제됩니까?

class User < ActiveRecord::Base 
    has_and_belong_to_many :roles # need to use :dependent => :destroy to remove join record? 
end 

class Role < ActiveRecord::Base 
    has_and_belong_to_many :users # need to use :dependent => :destroy to remove join record? 
end 

답변

10

조인 테이블 항목은 제거되었지만 역할이나 사용자는 제거되지 않습니다. 종속 파괴 절을 has_and_belongs_to_many에 추가 할 수는 없지만 원하는 경우 조인 모델의 관계에 추가 할 수 있습니다. 제거되는 테이블 엔트리에 합류 관련된 예를이 역할을 파괴하려면 다음을 수행합니다 :

class RolesUser < ActiveRecord::Base 
    belongs_to :role, :dependent => :destroy 
    belongs_to :user 
end 
+1

HABTM의 요점 중 하나는 중간 모델이 없다고 생각했습니다. 그래서 이것은 RolesUsers 모델이 존재하지 않으면 작동하지 않을 것입니다. – ipd

+0

HABTM은 중간 모델/테이블을 필요로합니다. 그렇지 않으면 관계가 관계형 데이터베이스에 존재할 수 없습니다. @keruilin이 수행하려고하는 작업의 경우 기존의 RolesUser 모델에 추가하거나 생성해야합니다. –

+6

명확히하기 : HABTM에는 중간 * 테이블 *이 필요하지만 추가 모델은 필요하지 않습니다. 중간 모델에서 추가 컨트롤이나 필드가 필요하면'has_many/through'를 사용합니다. – ndp

0

확정 - 해당 사용자/역할과 조인 테이블에 사용자 또는 역할의 모든 레코드를 삭제하면 또한 삭제 될 것입니다

관련 문제