2017-01-05 13 views
1

スコープを構築するときに、2つの異なる時刻の列を考慮してActiveRecordを取得しようとしています。今私は現在持っている:2つのタイムゾーンのRailsスコープ

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 

アイデアはありますか?

答えて

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

あなたは二度同じ引数を使用して名前のプレースホルダを使用することができます。

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) 
関連する問題