Ruby on rails 在同一模型上高效地执行多个查询

Ruby on rails 在同一模型上高效地执行多个查询,ruby-on-rails,ruby-on-rails-3,sqlite,activerecord,Ruby On Rails,Ruby On Rails 3,Sqlite,Activerecord,几天来,我一直在兜圈子,试图解决一个我过去也一直在努力解决的问题。本质上,这是一个理解在一个模型上执行多个查询的最佳(或有效)方式的问题,因为我经常发现我的页面加载速度非常慢 考虑这样一种情况,即您有一个名为Everything的模型。最初,您执行一个查询,在所有内容中查找符合特定条件的记录 @chosenrecords = Everything.where('name LIKE ?', 'What I want').order('price ASC') 我想记住@chosenrecords的

几天来,我一直在兜圈子,试图解决一个我过去也一直在努力解决的问题。本质上,这是一个理解在一个模型上执行多个查询的最佳(或有效)方式的问题,因为我经常发现我的页面加载速度非常慢

考虑这样一种情况,即您有一个名为
Everything
的模型。最初,您执行一个查询,在
所有内容中查找符合特定条件的记录

@chosenrecords = Everything.where('name LIKE ?', 'What I want').order('price ASC')
我想记住
@chosenrecords
的内容,因为我将把它们作为列表呈现给用户,但是,我也想了解更多的
@chosenrecords
的属性

@minimumprice = @chosenrecords.first
@numberofrecords = @chosenrecords.count
当我在控制器中使用上述代码并检查本地服务器上的命令历史记录时,我惊讶地发现,这三个查询中的每一个都涉及对原始
Everything
模型的SQL查询,而不是记住
@chosenrecords
中返回的记录并对其执行查询。对我来说,这似乎效率很低,事实上,这三个查询中的每一个都需要相同的处理时间,这使得页面的执行速度很慢

我更擅长在MATLAB这样的软件中编写代码,一旦你计算了变量的值,它就存储在本地,可以快速查询,而不是每次你想知道更多关于它的信息时都重新计算变量。请您指导我,我是否完全走错了方向,我发现的问题只是“Rails中的情况”,或者我是否可以做些什么来改进它。我研究过一些概念,比如使用作用域、定义不同的变量类型和缓存,但我不太确定在每种情况下我都在做什么,结果都是类似的


感谢您抽出时间

您部分走错了方向。Rails 3附带了Arel,它将查询推迟到需要数据时进行。在您的例子中,您已经生成了Arel查询,但首先使用.count执行它,然后使用.count执行它。我在这里所做的是运行第一个查询,在一个数组中获取所有结果,并在接下来的两行中处理该数组

执行如下查询:-

@chosenrecords = Everything.where('name LIKE ?', 'What I want').order('price ASC').all

@minimumprice = @chosenrecords.first
@numberofrecords = @chosenrecords.size

它将解决您的问题。

谢谢,这真的很有用,节省了大量处理时间:)作为一个小扩展(对不起),我还有两个查询,形式为
@products\u in_pricerange1=@chosenrecords.select(“price”)。where('price-BETWEEN?和?',0,@max\u pricerange1)。count
。您的修复程序对
计数
第一次
最后一次
类型的查询进行了排序,这非常有用。我能做些什么来以类似的方式使用
where
加快查询速度?理想情况下,我希望统计四个价格范围内的产品数量,因此我当前的方法需要对
所有内容执行四次查询