1

他の条件とともに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クライアントでこのクエリを実行すると、魅力のように機能します。

4

1 に答える 1

0

たぶん...文字列から日付への変換に問題があります。STR_TO_DATE() 関数を使用してモデルを変換してみてください。日付ごとに実行してください...それが役立つことを教えてください。

于 2013-02-05T20:27:06.880 に答える