【发布时间】:2016-10-20 03:56:49
【问题描述】:
我有一个模型 Order.rb。我想在特定日期选择特定时间范围内的所有订单。例如:选择昨天 0-6 小时内创建的所有订单。或选择前天 0-12 小时内创建的所有订单。
目前,我可以创建范围以选择特定日期的订单。这里是:
scope :in_day, -> (day) { where("orders.created_at >= ?", (-1 * day).days.ago.beginning_of_day)\
.where("orders.created_at < ?", (-1 * (day + 1)).days.ago.beginning_of_day) }
所以我可以在 2 天前收到所有订单:
Order.in_day(-2)
但是我不知道如何创建像in_hour这样的范围,所以当我需要从2天的0-6小时获得所有订单时,我只需要:
Order.in_hour(-2, 6)
或者类似的东西。
此外,我想在特定日期的特定时间范围内选择回复的订单。得到回复订单的代码如下:
Order.joins( "LEFT JOIN messages ON orders.id = messages.order_id").uniq.where( "messages.user_id = orders.receive_user_id")
我可以选择前1天0-12小时内所有回复的订单:
Order.where(created_at: (1.days.ago.beginning_of_day.to_time..(1.days.ago.beginning_of_day.to_time + 12.hours))).joins( "LEFT JOIN messages ON orders.id = messages.order_id").uniq.where( "messages.user_id = orders.receive_user_id").count
但是,我仍然不知道如何为其创建范围。有人可以帮忙吗?
【问题讨论】:
标签: sql ruby ruby-on-rails-4 activerecord