他の条件とともに2日間の誕生日を持つすべてのユーザーを返すスコープを作成した後、問題が発生しました。この情報は、ユーザーダッシュボードに表示されることになっています。
ページを更新すると、0件のレコードが見つかりました。Rails開発環境コンソールでスコープを実行すると、0レコードも返されます。ただし、アクティブなロガーがオンになっているときにコンソールからクエリをコピーし、それをSQLクライアントに直接配置すると、正しいレコードが返されます。このスコープは他のいくつかのスコープともチェーンされていますが、このスコープをクエリチェーンから削除すると、クエリは機能し、このスコープで実行したいように生年月日範囲をフィルタリングしません。
SQLクライアントは同じデータベース上にあります。
スコープ:
where(
"(date_of_birth <= ?) OR DATE_ADD(date_of_birth, INTERVAL ? YEAR) BETWEEN ? AND ?",
min_age.years.ago.to_date,
min_age,
beginning_of_month,
end_of_month
)
クエリ:
SELECT `drivers`.* FROM `drivers` WHERE ( (date_of_birth <=
'1990-02-05') OR DATE_ADD(date_of_birth, INTERVAL 23 YEAR) BETWEEN
'2013-04-01' AND '2013-04-30') AND (drivers.id NOT IN (SELECT
driver_id from follow_ups where team_id = 2)) AND
(average_miles_per_day >= 0.35) AND (travel_time < 2000) AND
(travel_time + (average_miles_per_day * 84) >= 2000)
Railsがこのクエリを実行しようとすると、機能しません。SQLクライアントでこのクエリを実行すると、魅力のように機能します。