我正在运行一个SQL查询,它返回一些订单,每个订单都有一个日期。我想查看当前日期的订单是什么?
我可以通过以下方式完成:
orders = Order.find_by_sql(query).reject {|o|
today = Time.now
end_of_today = Time.local(today.year, today.month, today.day, 23, 59, 59)
start_of_today = Time.local(today.year, today.month, today.day, 00,00,00 )
o.date > end_of_today
o.date < start_of_today
}.sort_by {|o|
o.delivery_date
}
'orders'包含今天任何时候发出的所有订单。
在ruby中有更简单的方法吗?
答案 0 :(得分:1)
要获取当前日期的订单,您可以执行以下操作:
orders = Order.where("date >= ?", Time.zone.now.beginning_of_day).order(:delivery_date)
希望这有帮助!
答案 1 :(得分:0)
使用DateTime.now.beginning_of_day
Order.where('date >= ?', DateTime.now.beginning_of_day).order(:delivery_date)
答案 2 :(得分:0)
现在您从数据库获取所有订单(取决于query
中的字符串),然后过滤数组,如果您拥有大型数据库,这不是最有效的方式。更好的方法是在SQL端执行此操作。
只需使用纯字符串条件:
# Or set it to any other date in the past
target_date = Time.zone.now
orders = Order.find_by_sql(query)
.where("date >= ?", target_date.beginning_of_day)
.where("date <= ?", target_date.end_of_day)
.order(:delivery_date)
此处有更多详情:http://guides.rubyonrails.org/active_record_querying.html#pure-string-conditions
有关Active Support DateTime方法的更多信息:http://api.rubyonrails.org/classes/DateTime.html#method-i-beginning_of_day
答案 3 :(得分:0)
我认为你正在寻找这个,它将涵盖今天的所有订单
orders = Order.where("created_at <= ? AND created_at >= ?", Time.zone.now.end_of_day, Time.zone.now.beginning_of_day).order(:delivery_date)