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: :destroy
或 dependent: :nullify
之一添加到 has_many
语句中,具体取决于您是要删除 children 还是将其外键字段置为空.
例如,要删除属于正在删除的个案工作者的个案,您可以使用:
class Caseworker < ActiveRecord::Base
has_many :cases, dependent: :destroy
end
据我所知,Rails 无法将 children 重新分配给另一个 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: :destroy
或 dependent: :nullify
之一添加到 has_many
语句中,具体取决于您是要删除 children 还是将其外键字段置为空.
例如,要删除属于正在删除的个案工作者的个案,您可以使用:
class Caseworker < ActiveRecord::Base
has_many :cases, dependent: :destroy
end
据我所知,Rails 无法将 children 重新分配给另一个 parent - 您必须自己编写代码才能完成。