Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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 如何在执行.limit()后获取activerecord对象的子集?_Ruby On Rails_Where_Limit - Fatal编程技术网

Ruby on rails 如何在执行.limit()后获取activerecord对象的子集?

Ruby on rails 如何在执行.limit()后获取activerecord对象的子集?,ruby-on-rails,where,limit,Ruby On Rails,Where,Limit,我希望能够将返回的activerecord对象限制为20个,然后执行where()返回有限对象的子集,我目前知道只有10个对象符合第二列标准 e、 g.理想行为: o = Object.limit(20) o.where(column: criteria).count => 10 但是,activerecord仍然会查找满足where()条件的20个对象,但会查找limit()自行返回的原始20个对象之外的对象 如何获得所需的响应?减少搜索空间的一种方法是使用嵌套查询。您应该搜索前N条记

我希望能够将返回的activerecord对象限制为20个,然后执行where()返回有限对象的子集,我目前知道只有10个对象符合第二列标准

e、 g.理想行为:

o = Object.limit(20)
o.where(column: criteria).count
=> 10
但是,activerecord仍然会查找满足where()条件的20个对象,但会查找limit()自行返回的原始20个对象之外的对象


如何获得所需的响应?

减少搜索空间的一种方法是使用嵌套查询。您应该搜索前N条记录,而不是所有符合特定条件的记录。在SQL中,可以这样做:

select * from (select * from table order by ORDERING_FIELD limit 20) where column = value;
上面的查询将只搜索表中20行的条件。请注意,我是如何添加了一个ORDERING_字段的,这是必需的,因为每次运行查询时,每个查询都会给出不同的顺序

要在Rails中执行类似操作,可以尝试以下操作:

Object.where(id: Object.order(:id).limit(20).select(:id)).where(column: criteria)
SELECT [objects].* FROM [objects] WHERE [objects].[id] IN (SELECT TOP (20) [objects].[id] FROM [objects] ORDER BY [objects].id ASC) AND [objects].[column] = criteria
这将执行类似于以下内容的查询:

Object.where(id: Object.order(:id).limit(20).select(:id)).where(column: criteria)
SELECT [objects].* FROM [objects] WHERE [objects].[id] IN (SELECT TOP (20) [objects].[id] FROM [objects] ORDER BY [objects].id ASC) AND [objects].[column] = criteria