Rails で Postgres クエリを使用すると奇妙な問題が発生します。
クエリは次のようになります。
WeeklyPlanner.find_or_create_by_user_id(current_user.id).recipes.find(:all,
:conditions => ["
weekly_planner_events.time_start =
date_part('epoch', to_timestamp(?)::timestamptz at time zone 'CDT')",
Time.local(Time.now.year, Time.now.month, Time.now.day).to_i
])
これにより、(コンソールで確認できるように) 次の SQL ステートメントが生成されます。
SELECT "recipes".* FROM "recipes"
INNER JOIN "weekly_planner_events" ON "recipes"."id" = "weekly_planner_events"."recipe_id"
WHERE "weekly_planner_events"."weekly_planner_id" = 2
AND (weekly_planner_events.time_start = date_part('epoch', to_timestamp(1347426000)::timestamptz at time zone 'CDT'))
私の問題は、生成された SQL ステートメントが psql または pgAdmin でうまく機能することですが、レールでは空の配列を返します。つまり、postgres コンソールにそのままコピー アンド ペーストすると問題なく動作しますが、Rails コンソールで実行すると何も返されず、なぜそうなるのかわかりません。
私は次のことを試しました:
- 「エポック」と「CDT」/タイムゾーンのパラメーター化 (
'
sを削除するため) where
同じ条件でステートメントに切り替える#{}
sで変数を渡す
関数を使用せずに検索をdate_part('epoch', [float])
実行すると、Rails で問題なく動作しますが、明らかに必要な結果ではありません。
この問題は非常に紛らわしいと思います。他に必要なデータがある場合はお知らせください。投稿を編集します。
ありがとうございました。