【问题标题】:Rails generated query result is empty, but returns value in PostgresRails 生成的查询结果为空,但在 Postgres 中返回值
【发布时间】:2012-09-12 17:01:09
【问题描述】:

我在使用 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'/timezone(为了删除 's
  • 切换到where 语句,条件相同
  • 使用#{}s 传递变量

搜索date_part('epoch', [float]) 函数在 Rails 中工作正常,但它显然不是我需要的结果。

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 啊,是的。我很确定它会获取现有的 WeeklyPlanner。它总是finding,而不是创建,至少对于这个特定的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多