2016-03-25 16 views
0

Benim modelleri şu şekilde görünür:Çocuk kayıtlarını birden çok belongs_to ile nasıl silersiniz?

class Project < ActiveRecord::Base 
has_many :entries 
end 

class User < ActiveRecord::Base 
has_many :entries 
end 

class Entry < ActiveRecord::Base 
belongs_to :user 
belongs_to :project 
end 

Ben silindiğinde bir proje bağlıdır her Girişi silmek istiyorum. Postürleri UUID'lerle kimliklerini kullanıyorum.

class Project < ActiveRecord::Base 
has_many :entries, dependent: :destroy 
end 

Ve bu: Proje silindiğinde

class Project < ActiveRecord::Base 
has_many :entries 

before_destroy { |project| Entry.destroy_all "project_id = #{project.id}" } 
end 

Fakat girişler hala orada Bu denedim. Sanırım sebebi hala başka bir ana nesneye sahip olmaları.

Ben de denetleyicisi silin çalıştı:

Sorun nedir
def destroy 
    @project = current_company.projects.find(params[:id]) 
    @project.time_entries.delete_all 
    ... 
end 

, ben eksik bir şey?

cevap

1

has_many :entries, dependent: :destroy hattı çalışmalıdır. Ancak, her şey project'u nasıl kaldırdığınıza bağlıdır. Eğer

@project.delete 

derseniz delete tüm entries kaldıracaktır geri aramalar, atlar olarak o zaman işe asla. Bunun yerine, destroy çağrı geri aramalar yaptığı gibi o zaman çalışması gerektiğini

@project.destroy 

gibi bir şey kullanmayı deneyin. BTW, aynı kurallar delete_all ve destroy_all varyantları için geçerlidir.

+0

Vay canına, bu iki yöntem arasında bir fark olduğunu fark etmemiştim. Bunu açıkladığın için teşekkürler! –

İlgili konular