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

Rails: HT switch Parent of Child objects when Deleting Parent?

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

class Caseworker < ActiveRecord::Base
  has_many :cases
end

class Case < ActiveRecord::Base
  belongs_to :caseworkers
end

... 具有创建、查看、更新和销毁它们的视图。然后我 创建多个案例工作者并为他们分配多个案例。

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

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

没问题,这是可以预料的。

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

您可以将 dependent: :destroydependent: :nullify 之一添加到 has_many 语句中,具体取决于您是要删除 children 还是将其外键字段置为空.

例如,要删除属于正在删除的个案工作者的个案,您可以使用:

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

据我所知,Rails 无法将 children 重新分配给另一个 parent - 您必须自己编写代码才能完成。