返回found_rows的计数以及有限的活动记录查询结果

时间:2013-02-25 18:47:15

标签: ruby-on-rails-3 postgresql activerecord

请原谅这个问题的noobee性质。

我有一个故事模型。每个故事都有一个存储在自己的DB列中的类别属性。我有一个名为:in_categories的命名范围,它返回所有具有包含在给定类别数组中的类别的故事:

  scope :in_categories, lambda {|categories|
        where(:category => categories)
  }

我现在要做的是限制响应的长度,但也返回数据库中响应行总数的计数,忽略限制。例如,假设我将范围更改为:

  scope :in_categories, lambda {|categories|
        where(:category => categories).limit(20)
  }

但实际上有35个故事在类别数组中有一个类别。如何取回20个活动记录对象和35个计数变量?我需要第二个数据库查询吗?我在mysql中遇到了FOUND_ROWS_函数,但我正在使用postgresql。

1 个答案:

答案 0 :(得分:1)

看看http://www.postgresql.org/message-id/1185863074.10580.91.camel@linda.lfix.co.uk

  

没有等价物。使用

BEGIN;
SELECT * FROM mytable OFFSET X LIMIT Y;
SELECT COUNT(*) AS total FROM mytable;
END;
     

(为了确保一致的结果,两个查询都应该在一个查询中完成   事务。)

手头没有rails env因此只有伪代码

Story.transaction do
  story.in_categories
  story.where(:category => categories).count
end

有关有效记录交易的更多信息http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

实际上,我们不使用事务,只是按顺序执行这些查询。从来没有遇到过这方面的问题,但当然这取决于你的项目。