Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从内存中的集合中删除项_Ruby On Rails_Ruby - Fatal编程技术网

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您有点邪恶。