Rails,给定一个项目数组,如何在控制台中删除



给定以下条件:

@users = User.where(:state => 1)
which 15 for: @users.length

在rails控制台中,有没有一种方法可以删除所有这些记录,也许可以通过执行@users.delete之类的操作?

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

最简单的方法是使用destroy_alldelete_all:

@users.destroy_all
# OR
@users.delete_all

仅此而已

您的模型类有一个delete方法(和destroy方法(,可以使用单个ID或一个ID数组来删除(或销毁(。传递一个数组将只发出单个DELETE语句,在这种情况下是最好的选择。

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

请注意,当您在ActiveRecord模型上调用destroy时,它会在删除记录之前创建该记录的实例(因此会运行回调等(。在这种情况下,由于您已经有了完全实例化的对象,如果您真的想调用destroy(而不是delete(,那么使用J--L的答案中的方法并自己迭代它们可能会更具性能。

yep:

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

@users.destroy_all

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

销毁所有是最简单的方法。语法如下:

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

以防有人需要。在Rails6中,如果您已经知道要删除什么,并且希望以高效的方式对许多记录进行删除,那么您可以使用以下两种方法之一:

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

基于delete_all,文档:

  • delete_by:https://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-delete_by
  • delete_all:https://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-delete_all

或:

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

基于destroy_all,文档:

  • destroy_by:https://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-destroy_by
  • destroy_all:https://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-destroy_all

不同之处在于delete_by不会运行回调、验证,也不会删除依赖关联。而destroy_by将完成所有这些(但以较慢的方式(。因此,这实际上取决于您希望为应用程序实现什么。

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

相关内容

  • 没有找到相关文章

最新更新