我们正在寻找删除Rails transaction
中的多个记录的命令。为了在transaction
内触发,我们使用destroy_all!
和delete_all!
并收到method not defined
错误。在Rails事务中触发的多条记录的正确删除命令(或正确方法)是什么?
答案 0 :(得分:9)
不,没有名为delete_all!
或destroy_all!
的方法。请参阅the documentation。
改为使用delete_all
或destroy_all
。如果删除失败,这些方法将引发ActiveRecord错误。这意味着如果出现错误,您的事务将被回滚。
答案 1 :(得分:1)
没有名为delete_all!
或destroy_all!
的方法,但请查看destroy_all!
源代码:
def destroy_all(conditions = nil)
find(:all, :conditions => conditions).each { |object| object.destroy }
end
它调用方法destroy,所以我在这里看不到任何异常。你可以用它。
records.each &:destroy!
答案 2 :(得分:0)
Rails中没有delete_all!
或destroy_all!
,但Rails有delete_all和destroy_all方法。这两种方法之间的差异是:delete_all
仅删除具有给定条件的匹配记录,但不删除依赖/关联记录,其中destroy_all
删除所有匹配记录及其依赖/关联记录。因此,请根据您的需要明智地在delete_all
和destroy_all
之间进行选择。
答案 3 :(得分:0)
destroy_all的源代码为:
def destroy_all(conditions = nil)
find(:all, :conditions => conditions).each { |object| object.destroy }
end
和object.destroy
仅在删除失败时返回false而不引发错误以触发事务。
所以,也许我们需要像这样使用它:
ActiveRecord::Base.transaction do
records.each(&:destroy!)
end
对吗?