Rails适用于两个时区

时间:2017-01-05 07:07:01

标签: ruby-on-rails ruby activerecord

在构建示波器时,我试图让ActiveRecord考虑两个不同的时间列。现在我现在有:

new_cars = Car.where('car_created_at > ?', DateTime.now.in_time_zone("Europe/Stockholm").beginning_of_day)

虽然我希望范围还考虑另一个名为order_created_at的日期时间字段,该字段遵循从欧洲/斯德哥尔摩时间开始的相同规则。例如,最终结果SQL理想情况如下:

SELECT "cars".* FROM "cars" 
WHERE car_created_at > '2017-01-04 23:00:00' 
AND order_created_at > '2017-01-04 23:00:00' 
ORDER BY id DESC 

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

new_cars = Car.where('car_created_at > ? AND order_created_at > ?', DateTime.now.in_time_zone("Europe/Stockholm").beginning_of_day, DateTime.now.in_time_zone("Europe/Stockholm").beginning_of_day).order(id: :desc)

模型中的范围可能如下所示:

scope :scope_name, -> { where('car_created_at > ? AND order_created_at > ?', DateTime.now.in_time_zone("Europe/Stockholm").beginning_of_day, DateTime.now.in_time_zone("Europe/Stockholm").beginning_of_day).order(id: :desc) }

答案 1 :(得分:1)

您可以使用命名占位符两次使用相同的参数:

date = DateTime.now.in_time_zone("Europe/Stockholm").beginning_of_day

new_cars = Car.where('car_created_at > :d AND order_created_at > :d', d: date)