在 Rails 2.2.2(ruby 1.8.7-p72)中,我想在实际执行之前评估破坏对象的影响。即我希望能够生成将受 :dependent => :destroy 影响的所有对象的列表(通过对象的关联)。我要解决的真正问题是为用户提供将要删除的所有内容的列表,并让他们确认操作。
谁能推荐一个解决这个问题的好方法?我刚刚开始研究 ActiveRecord::Associations,但没有取得太大进展。
更新:在我的特殊情况下,我有各种级别的对象(A --> B --> C)。
在 Rails 2.2.2(ruby 1.8.7-p72)中,我想在实际执行之前评估破坏对象的影响。即我希望能够生成将受 :dependent => :destroy 影响的所有对象的列表(通过对象的关联)。我要解决的真正问题是为用户提供将要删除的所有内容的列表,并让他们确认操作。
谁能推荐一个解决这个问题的好方法?我刚刚开始研究 ActiveRecord::Associations,但没有取得太大进展。
更新:在我的特殊情况下,我有各种级别的对象(A --> B --> C)。
这应该可以帮助您入门...显然您必须对其进行自定义,但这列出了依赖于类 BlogEntry 销毁的所有关联名称:
BlogEntry.reflect_on_all_associations.map do |association|
if association.options[:dependent] == :destroy
# do something here...
association.name
end
end.compact
=> [:taggings, :comments]
只需手动维护一个关联对象的列表与依赖破坏(可能无论如何都要做),然后为每个对象设置 named_scopes 以拉入包含的对象以进行显示。
我想说的是,如上所述,有一种向用户显示受影响记录的方法,然后有两个按钮/链接,一个是删除,可能会为用户提供确认警报,询问他们是否检查了另一个链接他们将影响的所有记录的列表。
然后,如果你想确定你也可以通过在数据库中将它们标记为已删除而不是实际删除它们来进行软删除,这可能会派上用场,我不知道你将如何处理自动依赖删除,可能使用acts_as_paranoid,或者某种在父模型上带有回调的自卷版本。
最近我写了一个简单的 Rails 插件来解决这个问题。
在 github 上查看:http: //github.com/murbanski/affected_on_destroy/tree