1

请原谅这个问题的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。

4

1 回答 1

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

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

于 2013-02-25T18:58:28.550 回答