【问题标题】:Rails 3 complex query with sortRails 3 带排序的复杂查询
【发布时间】:2014-07-11 02:25:24
【问题描述】:

我有一个User 模型和一个Event 模型。用户has_many events。我想要做的是找到在过去 24 小时内创建的 events 最多的用户。

理想情况下,输出格式应该是一个哈希数组[{User => [Event, Event, ...]}],它会按照用户的events.count最高排序

谢谢

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:

这对我有用,但可能需要根据您的数据库进行调整。

class User
  scope :by_most_events, -> { 
    joins(:events)
    .select("users.*, count(events.id) as event_count")
    .where(events: { created_at: 24.hours.ago..Time.now })
    .group("users.id, events.id") # this is for postgres (required group for aggregate)
    .order("event_count desc")
  }
end

### usage

User.by_most_events.limit(1).first.event_count
# => 123

正如 Sixty4Bit 所提到的,您应该使用 counter_cache,但在这种情况下它是不够的,因为您需要查询 在过去 24 小时内创建的事件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2013-05-22
    • 2018-11-24
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2021-03-09
    相关资源
    最近更新 更多