如何删除多个belongs_to的子记录?

时间:2016-03-25 01:25:43

标签: ruby-on-rails activerecord

我的模特看起来像这样:

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

我希望在删除项目时删除依赖于项目的每个条目。我使用带有UUID的Postgres作为他们的ID。我试过这个:

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

而且:

class Project < ActiveRecord::Base
 has_many :entries

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

但是当项目被删除时,条目仍然存在。我认为原因是他们还有另一个父对象。

我也尝试从控制器中删除它们:

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

问题是什么,我错过了什么?

1 个答案:

答案 0 :(得分:1)

has_many :entries, dependent: :destroy应该有效。但是,这一切都取决于您如何删除project。如果你说

@project.delete

然后它永远不会工作,因为delete会跳过回调,这会删除所有entries。相反,尝试使用像

这样的东西
@project.destroy

然后它应该工作,因为destroy会调用回调。顺便说一句,同样的规则适用于delete_alldestroy_all变体。