【发布时间】:2014-04-29 08:01:08
【问题描述】:
我注意到 Rails (4.1) ActiveRecord 有一些奇怪的地方,select 和 count 有时混用很差:
User.all.count
=> 103
User.all.size
=> 103
User.all.length
=> 103
到目前为止,一切都很好。我可以选择id:
User.select(:id).all.count
=> 103
User.select(:id).all.size
=> 103
User.select(:id).all.length
=> 103
还是不错的。我也可以选择email:
User.select(:email).all.count
=> 103
User.select(:email).all.size
=> 103
User.select(:email).all.length
=> 103
但现在问题开始了。当我选择 both id 和 email 时:
User.select(:id, :email).all.count
(0.4ms) SELECT COUNT(id, email) FROM `users`
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' email) FROM `users`' at line 1: SELECT COUNT(id, email) FROM `users`
ActiveRecord::StatementInvalid: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' email) FROM `users`' at line 1: SELECT COUNT(id, email) FROM `users`
User.select(:id, :email).all.size
(0.4ms) SELECT COUNT(id, email) FROM `users`
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' email) FROM `users`' at line 1: SELECT COUNT(id, email) FROM `users`
ActiveRecord::StatementInvalid: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' email) FROM `users`' at line 1: SELECT COUNT(id, email) FROM `users`
User.select(:id, :email).all.length
=> 103
为什么count 和size(在这种情况下是count 的别名)会抛出异常,并且只有当我选择多个 属性时?
对此有解释吗?我觉得这很出人意料。
【问题讨论】:
-
你试过没有
.all-User.select(:id, :email).size吗? -
@RichPeck 恐怕
User.select(:id, :email).size会抛出同样的异常。
标签: sql ruby-on-rails activerecord ruby-on-rails-4 ruby-on-rails-4.1