请原谅这个问题的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。
答案 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
实际上,我们不使用事务,只是按顺序执行这些查询。从来没有遇到过这方面的问题,但当然这取决于你的项目。