我正在使用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
子句......这是真的吗?如果需要的话,我不怕写这样的方法,但如果我在某处使用它,我宁愿不重新发明这种方法。
答案 0 :(得分:2)
您可以在dependent: :destroy
语句中添加dependent: :nullify
或has_many
之一,具体取决于您是要删除子项还是将其外键字段置为空。
例如,要删除属于正在删除的Caseworker的案例,您可以使用:
class Caseworker < ActiveRecord::Base
has_many :cases, dependent: :destroy
end
据我所知,Rails无法将孩子重新分配给另一位家长 - 您必须自己编写代码来自己做。