使用named_scope获取行数

unk*_*ser 12 ruby ruby-on-rails

Rails大师:我刚刚发现named_scope感谢另一个SO用户.:)

我想得到一组行的计数 - 即a SELECT COUNT(*).另外,我希望仍然能够在调用中链接命名范围.

这是命名范围的合法(尽管是奇怪的)用法吗?

named_scope :count, :select => "COUNT(*) as count_all"
Run Code Online (Sandbox Code Playgroud)

那么我可以做(例如):

@foobar = Foobar.count.scope.scope.scope
Run Code Online (Sandbox Code Playgroud)

通过访问计数@foobar.first.count_all.

(编辑解决艾伦的评论)

你可以这样做:

@foobar = Foobar.scope.scope.scope.size
Run Code Online (Sandbox Code Playgroud)

但这会导致结果查询而不是更快的SELECT COUNT(*)查询.我在查询的数据库中有大量的行.

有一个更好的方法吗?

zen*_*azn 20

您正在寻找的功能是内置的.

Foobar.count # SELECT count(*) AS count_all FROM "foobars"
Foobar.named_scope.count # SELECT count(*) AS count_all FROM "foobars" WHERE ....
Run Code Online (Sandbox Code Playgroud)

如果您script/server以开发模式运行,您将在执行时看到查询.

  • 咄.有时在轨道上的事情很容易,我很想念.谢谢! (3认同)