2009-04-26 72 views
4

在Rails 2.2.2(ruby 1.8.7-p72)中,我想评估在实际执行之前销毁对象的影响。即我希望能够生成将受到以下影响的所有对象的列表:dependent =>:destroy(通过对象的关联)。我试图解决的真正问题是给用户一个所有将被删除并让他们确认操作的列表。评价:dependent =>:destroy

任何人都可以推荐一个很好的方式去解决这个问题吗?我刚开始研究ActiveRecord :: Associations,但我没有取得多大进展。

更新:在我的特殊情况下,我有各种级别的对象(A - > B - > C)。

回答

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] 
+0

我不知道,谢谢! http://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html – marcgg 2009-04-27 16:02:48

1

只需手动维护一个关联对象的列表与相关的销毁(可能是去做的事情),然后有每个的named_scopes拉入所包含的对象来显示。

0

我想说的是,如前所述,有一种方法可以向用户显示受影响的记录,然后有两个按钮/链接,一个是删除,也许有一个用户确认提醒,询问他们是否已经检查其他链接是它们将影响的所有记录的列表。

然后,如果你想确定你也可以做一个软删除,将它们标记为在数据库中删除而不是实际删除它们,这可能会派上用场,我不知道你将如何处理在自动相关性删除上,可能使用acts_as_paranoid,或者在父模型上使用回调的某种自卷版本。