2011-02-14 20 views
17
class Company 
    has_and_belongs_to_many :users 
end 

class User 
    has_and_belongs_to_many :companies 
end 

Bir şirketi sildiğimde, SADECE bu şirketteki kullanıcıların ilişkilendirmelerini silmek için en iyi (önerilen) yol nedir?raylar 3 habtm yalnızca ilişkilendirme

cevap

17

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_and_belongs_to_many

collection.delete hile olacaktır (i, sadece dernek gerçek kullanıcılar değil demek).

+0

Bağlantı artık bozuk. – sivabudh

+1

@ ShaChris23 Bağlantıyı, resmi API’dan en güncel olan güncellemeye güncelledim. Yakında "collection.delete" yi kaldıracaklarından şüpheliyim, bu yüzden muhtemelen bunun için en iyi bağlantıdır. Başların için teşekkürler. – theIV

+1

wheere buna demeliyim? –

11

Sil yerine yok seçeneğini belirlerseniz, ilişkilendirmeler otomatik olarak silinir.

18

Modelde model mantığını koruduğundan aşağıdakileri tercih ederim. ActiveRecord'un neden bunu yapmadığını anlamıyorum. Neyse, her iki modelde de, aşağıdaki geri bildirimi ekliyorum. Yani örnekteki

before_destroy {|object| object.collection.clear} 

: Bir çağlayan bir koleksiyon dernek üzerinde silme yapıyor etrafında tartışmalar bir sürü olarak

class Company 
    has_and_belongs_to_many :users 
    before_destroy {|company| company.users.clear} 
end 

class User 
    has_and_belongs_to_many :companies 
    before_destroy {|user| user.companies.clear} 
end 

, birçok kişi ölü HABTM dernek ilan edip has_many tavsiye: yerine yoluyla. Katılmıyorum. Anlamını ne olursa olsun kullanın. Derlemenin içsel öznitelikleri yoksa, HABTM kullanın.