Rails生成的查询结果为空,但在Postgres中返回值

时间:2012-09-12 17:01:10

标签: sql ruby-on-rails-3 postgresql-9.1

我在使用Postgres查询的Rails中遇到了一个奇怪的问题。

查询看起来像这样:

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上运行良好,但在rails上它返回一个空数组。也就是说,如果我将它复制并粘贴到postgres控制台上,它的工作完全正常,但是当我在Rails控制台上运行它时,它什么也没有返回,我不知道它为什么会发生。

我尝试了以下内容:

  • 参数化'epoch'和'CDT'/时区(为了删除' s
  • 切换到具有相同条件的where语句
  • 使用#{} s
  • 传递变量

在没有的情况下执行搜索 {/ 1}}功能在Rails中运行正常,但显然不是我需要的结果。

我发现这个问题很混乱,如果您需要其他任何数据请告诉我,我会编辑该帖子。

谢谢。

1 个答案:

答案 0 :(得分:0)

也许当您使用find_or_create方法时,它正在使用创建操作,因此您为用户创建了新的WeeklyPlanner,而这个全新的WeeklyPlanner没有食谱因为它刚刚创建而附在它上面 当您转到psql时,您可能会使用现有的WeeklyPlanner 但这只是猜测。