【问题标题】:Rails5.2 - Active Record .select() causing error when .count is calledRails 5.2 - Activerecord .select() 在调用 .count 时导致错误
【发布时间】:2019-07-26 11:14:11
【问题描述】:

如何将另一列添加到范围,并且仍然能够调用 .count、.find、.where 等。

 User.all.select('users.*,"one" as one').count

结果:

  (1.3ms)  SELECT COUNT(users.*,"one" as one) FROM "users"
Traceback (most recent call last):
        1: from (irb):7
ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR:  syntax error at or near "as")
LINE 1: SELECT COUNT(users.*,"one" as one) FROM "users"
                                   ^
: SELECT COUNT(users.*,"one" as one) FROM "users"

【问题讨论】:

  • 你要数什么??
  • 这是一个简化的例子,但需要多次操作后计算一个范围,添加select as语句和联合。
  • 你可以试试写成User.all.select("users.*, 'one' as one").count吗? (交换双引号和单引号)。在 PostgreSQL 中,您需要对字符串使用单引号。
  • @GregoryWitek 这给出了同样的错误
  • User.all.select("users.*, 'one' as one").size 有效,但可能不是您想要的。

标签: ruby-on-rails postgresql activerecord ruby-on-rails-5.2


【解决方案1】:
 User.all.select('users.*,"one" as one').count(:all)

 User.all.select('users.*,"one" as one').count(:id)

两者都有效,因为它指定了 SQL 代码应该依赖的内容。

【讨论】:

  • 他们不会产生操作正在寻找的查询。
  • 查看查询提供的操作,你的查询生成的sql没有使用select字段
  • 如果你要返回一个计数,选择​​无关紧要,但如果你在计数之前进行其他操作,则很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 2019-11-14
相关资源
最近更新 更多