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