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;