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

Joh*_*ash 9 ruby-on-rails ruby-on-rails-4

两者之间有什么区别吗?

User.count 
Run Code Online (Sandbox Code Playgroud)

User.count(:all)
Run Code Online (Sandbox Code Playgroud)

我将rails升级到4.0然后当我使用ModelName.count(:all)它运行良好但如果我使用ModelName.count以下错误发生.他们的机器人的方式在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"
Run Code Online (Sandbox Code Playgroud)

dee*_*our 7

我也遇到了这个问题。此提交中引入了更改。像一条线

User.count
Run Code Online (Sandbox Code Playgroud)

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

User.count(:all)
Run Code Online (Sandbox Code Playgroud)

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

Gemfile最初有以下内容(如评论中所述)

gem "rails", github: "rails/rails", branch: "4-0-stable"
Run Code Online (Sandbox Code Playgroud)

但我需要运行bundle update rails以拉下上面提到的较新的提交。


ale*_*mov 0

我想他们之间没有区别

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

通过不传递任何参数来计数,它将返回模型所有行的计数。