Rails:删除父级时,HT切换子对象的父对象?

时间:2016-05-24 23:22:26

标签: ruby-on-rails ruby-on-rails-4 has-many belongs-to

我正在使用Rails 4.2.6构建一个小应用程序。假设我有 以下课程:

class Caseworker < ActiveRecord::Base
  has_many :cases
end

class Case < ActiveRecord::Base
  belongs_to :caseworkers
end

...用视图来创建,查看,更新和销毁它们。然后我 创建多个Caseworkers并为其分配多个案例。

目前,如果我尝试删除个案工作者,我会收到错误:

Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails

没问题,这是预期的。

但是,在某些CMS中,如果是用户 试图破坏具有这种依赖关系的对象,你可以呈现 它们可以选择将对象分配给另一个父对象,或者 摧毁他们。 Rails中是否有标准方法来提供此功能?否则,似乎我需要在Caseworker控制器中放置一个before_destroy子句......这是真的吗?如果需要的话,我不怕写这样的方法,但如果我在某处使用它,我宁愿不重新发明这种方法。

1 个答案:

答案 0 :(得分:2)

您可以在dependent: :destroy语句中添加dependent: :nullifyhas_many之一,具体取决于您是要删除子项还是将其外键字段置为空。

例如,要删除属于正在删除的Caseworker的案例,您可以使用:

class Caseworker < ActiveRecord::Base
  has_many :cases, dependent: :destroy
end

据我所知,Rails无法将孩子重新分配给另一位家长 - 您必须自己编写代码来自己做。