Railsのwhereの条件の色々な書き方
範囲指定はRangeオブジェクトが読みやすい
結合したテーブルのカラムで絞る場合はハッシュ形式が一般的
code: (rb)
# ➀ Rangeオブジェクト + ハッシュ形式
users = shop.users
.joins(:get_points)
.where(point_scheduled_expired_on: Date.new(2025,7,1)..Date.current) # ..(Rangeオブジェクト)で絞り込み
.where(get_points: { status: GetPoint.statuses:fixed }) # 結合したget_pointsテーブルのstatusカラムで絞り込み
.distinct
# ② Rangeオブジェクト + プレースホルダー
users = shop.users
.joins(:get_points)
.where(point_scheduled_expired_on: Date.new(2025,7,1)..Date.current)
.where("get_points.status = ?", GetPoint.statuses:fixed)
.distinct
# ③ 全てプレースホルダー
users = shop.users
.joins(:get_points)
.where("point_scheduled_expired_on BETWEEN ? AND ?", Date.new(2025,7,1), Date.current)
.where("get_points.status = ?", GetPoint.statuses:fixed)
.distinct
出力されるSQLのイメージ
code: (sql)
SELECT DISTINCT "users".*
FROM "users"
INNER JOIN "get_points"
ON "get_points"."user_id" = "users"."id"
WHERE "users"."point_scheduled_expired_on"
BETWEEN '2025-07-01' AND '2025-10-09'
AND "get_points"."status" = 1;
https://docs.ruby-lang.org/ja/latest/class/Range.html
https://railsguides.jp/active_record_querying.html#%E6%9D%A1%E4%BB%B6%E3%81%A7%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%82%92%E4%BD%BF%E3%81%86
#Rails
#SQL