ben*_*phw 5 activerecord ruby-on-rails
我有一个Event模型,它有很多EventDates.
EventDate有一个start_time属性,Event有一个next_occurrence方法,用最近的方法查找属于它的EventDate start_time.
我想找到排序的前5个事件next_occurrence(最快的第一个).
我想我可以用这样的东西来实现这个目标:
Event.joins(:event_dates).order('event_dates.start_time').limit(5)
Run Code Online (Sandbox Code Playgroud)
但这不对 - 如果我收集next_occurrence日期,它们就会失灵.
我怎么能查询这个以返回排序的事件next_occurrence?
尝试这个:
next_5_events = EventDate.select('event_id, min(date) as next_event_date')
.includes(:event)
.where('next_event_date > ?', Time.now)
.group(:event_id)
.order(:next_event_date)
.limit(5)
.map(&:event)
Run Code Online (Sandbox Code Playgroud)
解释:
为每个未来的Event最近的EventDate
EventDate.select('event_id, min(date) as next_event_date')
.where('next_event_date > ?', Time.now)
.group(:event_id)
Run Code Online (Sandbox Code Playgroud)
仅保留按顺序排列的前 5 个事件next_event_date
.order(:next_event_date)
.limit(5)
Run Code Online (Sandbox Code Playgroud)
按原样,请求将仅返回event_id和next_event_date,因此以下几行急切加载并返回Event对象
.includes(:event)
.map(&:event)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2353 次 |
| 最近记录: |