2011-02-16 15 views
11

Kullanıcının birçok Rol'e ait olduğu ve ait olduğu bir ilişkim olduğunu varsayalım. Kullanıcıyı yok ettiğimde, katılma tablosundaki kayıt otomatik olarak kaldırılıyor mu? Ya da kullanmam gerekiyor: bağımlı =>: yok? Rolü yok edersem ne olur?HABTM ilişkisinde birleştirme tablosundaki kayıtlar otomatik olarak yok edildi mi?

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 

cevap

10

Birleştirme tablosu girişi kaldırıldı, ancak Rol veya Kullanıcı kaldırılmadı. Has_and_belongs_to_many'ye bağımlı bir yoklama ekleyemezsiniz, ancak isterseniz, bunları birleştirme modelinizdeki ilişkilere ekleyebilirsiniz. kaldırılır tablo girdisi katılmak ilişkili zaman örnek bir rol yok etmek için aşağıdakileri yapmanız olacaktır:

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

Ben HABTM puanlarından biri ara model olmadığını düşündüm. Bu, RolesUsers modeli mevcut olmadığı sürece işe yaramaz. – ipd

+0

HABTM bir ara model/tablo gerektirir, aksi halde ilişki ilişkisel bir veritabanında bulunamaz. @keruilin'nin gerçekleştirmeye çalıştığı görev için mevcut RolesUser modeline ekleme yapması veya oluşturması gerekiyor. –

+6

Netleştirmek için: HABTM ara * tablo * gerektirir, ancak ekstra modeli değil. Ara modelde ekstra kontrollere veya alanlara ihtiyacınız varsa 'has_many/through' komutunu kullanacaksınız. – ndp

0

Onaylandı - O kullanıcı/rolle katılmak tablodaki bir kullanıcı veya rol, kayıtların hepsi sildiğinizde ayrıca silinecek

İlgili konular