2009-09-10 19 views
5

Ben one_to_many ilişkisi olan raylar bir modeli var. Babamı sildiğimde, bütün çocukları silmek istiyorum. Nasıl yapmalıyım?nasıl Raylar ActiveRecord bir one_to_many ilişkide bir çağlayan silme yapabilir?

class User < ActiveRecord::Base 
    has_many :orders, :foreign_key => "id_user" 
end 

class Order < ActiveRecord::Base 
    has_many :order_items, :foreign_key => "id_pedido" 
    belongs_to :user, :foreign_key => "id_usuer" 
end 

class OrderItem < ActiveRecord::Base 
    belongs_to :order, :foreign_key => "id_pedido" 
end 

cevap

9

JDL cevabı doğrudur - sizin User sınıfta yani has_many :orders ekleyebilir ve Order sınıfında, has_many :order_items ekleyin - her iki ilişkilere :dependent => :destroy eklemeniz gerekir.

Ayrıca belki ON DELETE CASCADE belirleyerek, bunları, MySQL davranış wrt yabancı anahtarları değiştirmek isteyebilirsiniz.

+0

İkiniz de @jdl ve @cite haklısınız. Yanlış yaptığım şey, yok etme yönteminin yanı sıra silme yöntemini çağırmaktı. Şimdi her şey iyi çalışıyor –

+0

Doğru% 100 .. Teşekkürler .. –

5

Ne aradığınız has_many üzerinde :dependent => :destroy seçeneğidir: Ben I bir kullanıcıya

Modellerim'i silmek tüm siparişler ve öğeleri silmek istiyorum.

has_many docs

+0

Denedim, ancak şunu anlıyorum: Bir üst satır silinemiyor veya güncelleştirilemiyor: Yabancı anahtar kısıtlaması başarısız oluyor ('detam2'.'order_items', CONSTRAINT' FKE3418DF1BA998374' YABANCI ANAHTAR ('id_order') REFERANSLAR' orders' ('id')): orders'' DAN sİL NEREDE ('IN (31)) ActiveRecord :: StatementInvalid id': Mysql :: Hata: silebilir veya bir üst satır güncellenemiyor: bir yabancı anahtar kısıtlaması (' detam2' başarısız olur. 'order_items', KISITLAMA' FKE3418DF1BA998374' YABANCI KEY ('id_order') REFERANSLAR' pedidos' ('id')): (IN id' (31')) –

+0

doğru @jdl ve her ikisi de orders' 'DAN SİL @ anmak. Yanlış yaptığım şey, yok etme yönteminin yanı sıra silme yöntemini çağırmaktı. Şimdi her şey iyi çalışıyor –

İlgili konular