Rails,给定一系列项目,如何在控制台中删除

时间:2011-04-23 00:54:31

标签: ruby-on-rails ruby-on-rails-3

鉴于以下内容:

@users = User.where(:state => 1)

which 15 for: @users.length

在rails控制台中,有没有办法可以删除所有这些记录,可能是通过像@users.delete那样做的?

7 个答案:

答案 0 :(得分:14)

@users = User.where(:state => 1)

最简单的方法是使用destroy_alldelete_all

@users.destroy_all
# OR
@users.delete_all

这就是

答案 1 :(得分:4)

您的模型类有a delete method(和destroy method),可以删除(或销毁)一个ID或一个ID数组。传递数组只会发出 DELETE语句,在这种情况下是最佳选择。

User.delete @users.map { |u| u.id }
# or
User.destroy @users.map { |u| u.id }

请注意,当您在ActiveRecord模型上调用destroy时,它会在删除之前创建记录实例(因此会运行回调等)。在这种情况下,由于您已经拥有完全实例化的对象,如果您确实想要调用destroy(而不是delete),那么使用J-_-L's answer中的方法可能会更高效。自己迭代。

答案 2 :(得分:2)

@users.destroy_all是最简单的方式

答案 3 :(得分:1)

是的:

@users.each{ |u| u.destroy }

答案 4 :(得分:1)

摧毁一切是最简单的方法。这是语法:

User.destroy_all(id: [2, 3])

答案 5 :(得分:0)

destroy_all或delete_all将执行如下查询:DELETE FROM USERS,因此它将删除表中的所有记录!!不仅是数组中对象的记录! 所以我认为最好的方法是User.delete @users.map { |u| u.id }

答案 6 :(得分:0)

万一有人需要这个。在Rails 6中,如果您已经知道要删除的内容,并且想要对许多记录进行有效的删除,则可以使用以下任一方法:

Model.delete_by(id: array_of_id, other_condition: value)

基于delete_all,文档为:

或:

Model.destroy_by(id: array_of_id, other_condition: value)

基于destroy_all,文档为:

区别在于delete_by不会运行回调,验证,也不会删除依赖的关联。尽管destroy_by将完成所有操作(但速度较慢)。因此,这实际上取决于您想要为应用程序实现什么。

这两种方法均应优先于.where.something,因为它们将创建单个SQL查询,而不是多个SQL查询。