0

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 で問題なく動作しますが、明らかに必要な結果ではありません。

この問題は非常に紛らわしいと思います。他に必要なデータがある場合はお知らせください。投稿を編集します。

ありがとうございました。

4

1 に答える 1

0

おそらくfind_or_create、作成アクションを使用しているメソッドを使用してWeeklyPlannerいる場合、ユーザー用に新しいものを作成します。この新しいブランドWeeklyPlannerには、作成されたばかりであるため、レシピが添付されていません。
に行くときはpsql、おそらく既存のものを使用しますWeeklyPlanner
しかし、これは単なる推測です。

于 2012-09-12T17:08:32.153 に答える