Checkin
モデルを持つRailsアプリがあります。当日の特定の時間範囲内にあるすべてのレコードを検索したいのですが、where
を記述して、すべてのレコードを取得するにはどうすればよいですか。午後12時から午後4時30分までに作成されましたか?
@ x1a4の答えはあなたにとって良いはずですが、範囲を使用して、より読みやすく、より短い方法でそれを行うことができます。
_ Checkin.where(created_at: Time.parse("12pm")..Time.parse("4:30pm"))
_
次のようなものが生成されます。
_SELECT "checkins".*
FROM "checkins"
WHERE ("checkins"."created_at" BETWEEN '2012-05-28 12:00:00.000000' AND '2012-05-28 16:30:00.000000')
_
Time.parse("12pm")
を他の方法で変更して、時間を作成できます。
これは、UTCタイムゾーンを想定すると機能するように見えます。
Record.where('created_at > ? AND created_at < ?', Date.today + 12.hours, Date.today + 16.5.hours)
またはBETWEEN
を使用:
Record.where('created_at BETWEEN ? AND ?', Date.today + 12.hours, Date.today + 16.5.hours)
BETWEEN
には、範囲の2番目の値が含まれる場合と含まれない場合があります。 Postgresにはそれが含まれています 。
以下のgemを使用して、日付間のレコードを見つけることができます。
これ gem 非常に使いやすく、より明確です[星別] [1]。私はこのgemを使用していますが、APIはより明確で、ドキュメントも十分に説明されています。
_Post.between_times(
Time.zone.now - 3.hours, # all posts in last 3 hours
Time.zone.now
)
_
ここでは、フィールドもPost.by_month("January", field: :updated_at)
に渡すことができます。
ドキュメントを参照して試してください。