Ruby on rails 从内存中的集合中删除项
我有一个包含如下类的集合:Ruby on rails 从内存中的集合中删除项,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个包含如下类的集合: locations = Location.all class Location < ActiveRecord::Base end 这非常有效,但我想知道还有什么其他方法可以用于学习目的(如果在另一种方式中有很大的性能优势,那么也应该知道) 更新 请忽略我最初从数据库加载收藏的事实,这不是重点。我想学习如何删除内存中的内容而不是简单的where子句:)您只需从数据库中获取所需的记录即可: Rails 4及以后的版本: locations = Location.
locations = Location.all
class Location < ActiveRecord::Base
end
这非常有效,但我想知道还有什么其他方法可以用于学习目的(如果在另一种方式中有很大的性能优势,那么也应该知道)
更新
请忽略我最初从数据库加载收藏的事实,这不是重点。我想学习如何删除内存中的内容而不是简单的where子句:)您只需从数据库中获取所需的记录即可: Rails 4及以后的版本:
locations = Location.where.not(code: "unused")
locations = Location.where("code != ?", "unused")
在Rails 4之前:
locations = Location.where.not(code: "unused")
locations = Location.where("code != ?", "unused")
如果您有一个集合,并且希望从中删除一些项目,则可以尝试以下方法:
locations.reject! {|location| location.code != "unused"}
您只需从数据库中获取所需的记录: Rails 4及以后的版本:
locations = Location.where.not(code: "unused")
locations = Location.where("code != ?", "unused")
在Rails 4之前:
locations = Location.where.not(code: "unused")
locations = Location.where("code != ?", "unused")
如果您有一个集合,并且希望从中删除一些项目,则可以尝试以下方法:
locations.reject! {|location| location.code != "unused"}
你这样做是错误的。在您的例子中,您正在从数据库中检索所有记录并获得一个记录数组。然后在数组中查找所需的记录。相反,您应该直接从DB获取记录:
Location.where("code != 'unused'")
# or in Rails 4 and latest
Location.where.not(code: "unused")
如果需要从数据库中删除记录,可以这样做:
Location.where.not(code: "unused").destroy_all
如果您只是想知道从现有阵列中删除元素的最佳方法,我认为您的思路是正确的。除了选择
之外,还有拒绝
,拒绝代码>,删除\u如果
方法。您可以在文档中了解更多关于它们的信息
有一篇相关的帖子可能会提供更多信息:你做得不对。在您的例子中,您正在从数据库中检索所有记录并获得一个记录数组。然后在数组中查找所需的记录。相反,您应该直接从DB获取记录:
Location.where("code != 'unused'")
# or in Rails 4 and latest
Location.where.not(code: "unused")
如果需要从数据库中删除记录,可以这样做:
Location.where.not(code: "unused").destroy_all
如果您只是想知道从现有阵列中删除元素的最佳方法,我认为您的思路是正确的。除了选择
之外,还有拒绝
,拒绝代码>,删除\u如果
方法。您可以在文档中了解更多关于它们的信息
有一篇相关帖子可能会提供更多信息:抱歉,请参阅我的问题更新,我正在尝试学习记忆技术。抱歉,请参阅我的问题更新,我正在尝试学习记忆技术。抱歉,请参阅我的问题更新,我正在尝试学习记忆技术。抱歉,请参阅我的问题更新,我正在尝试学习记忆技术。从编码风格的角度来看,你可能更喜欢拒绝{l|l.code==“unused”}
而不是选择{l|l.code!=“unused”}
(带有否定的条件确实会导致更多的认知负荷)。此外,我不能忽略一个事实,即您使用的是单字符变量1
,这被误读为数字l
(或者反过来;)@TeWu您有点邪恶。从编码风格的角度来看,您可能更喜欢拒绝{l | l.code==“unused”}
,而不是选择{l | l.code!=“unused”}
(带否定的条件确实会导致更多的认知负荷)。此外,我不能忽视一个事实,即您正在使用单字符变量1
,这被误读为数字l
(或者反过来;)@TeWu您有点邪恶。