【问题标题】:Count where is not null计算不为空的地方
【发布时间】:2016-08-29 04:43:04
【问题描述】:

现在我用

Appointment.where.not(time: nil).count

是否可以通过Appointment.count 做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5


    【解决方案1】:

    如果您想使用.count 实现此目的,您必须从数据库中加载所有对象,然后使用 ruby​​ 计数。 (来自文档:http://edgeapi.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html#method-i-count

    所以正确的方法就是你已经拥有的。它构建查询以计算时间列不为空的所有对象。

    为什么要改变它?

    【讨论】:

    • Appointment.where.not(time: nil) 是否存在 sql 性能问题?生成的 sql 是 select * from ... 但不是 `SELECT COUNT(column_name) FROM ...'
    • 没有。如果您使用Appointment.where.not(time: nil).count,这将生成:SELECT COUNT(*) FROM "appointments" ...。因为count 方法是一个ActiveRecord 实现的方法。不是数组上的ruby核心方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2021-05-07
    • 1970-01-01
    • 2020-03-12
    相关资源
    最近更新 更多