Model.count和Model.count(:all)之间的rails差异

时间:2013-08-15 12:24:09

标签: ruby-on-rails ruby-on-rails-4

之间有什么区别吗?
User.count 

User.count(:all)

我将rails升级到4.0然后当我使用ModelName.count(:all)它运行良好但是如果我使用ModelName.count则会发生以下错误。通过它们的bot的方式在rails 3.2中运行良好

SELECT COUNT() FROM "users"
PG::WrongObjectType: ERROR:  count(*) must be used to call a parameterless aggregate function
LINE 1: SELECT COUNT() FROM "users"

2 个答案:

答案 0 :(得分:4)

我也遇到了这个问题。此更改已在 this commit 中引入。像

这样的一行
User.count

现在会抛出ActiveRecord::StatementInvalid错误,因为它会在Postgres上生成SELECT COUNT() FROM users。截至此提交,修复方法是将代码更新为

User.count(:all)

This commit 恢复之前存在的功能,使用:all作为“列”传递给ARel,从而导致有效的SQL查询SELECT COUNT(*) FROM users

我的Gemfile最初有以下(如评论中所述)

gem "rails", github: "rails/rails", branch: "4-0-stable"

但是我需要运行bundle update rails来下拉上面引用的新提交。

答案 1 :(得分:0)

我猜他们之间没有区别

http://apidock.com/rails/ActiveRecord/Calculations/count http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-count

  

如果没有将任何参数传递给count,它将返回模型的所有行的计数。