全,
我有一个查询,它是从某一特定日期开始寻找对话,以使移动应用程序能够查看自上次检查以来是否有更新的对话。我发现rails在进行查询之前并没有将我的"since_date“转换为UTC,而且我得到了不正确的结果。(这是我的功能测试得出的)
生成的查询是
SELECT "conversations".* FROM "conversations" INNER JOIN "conversation_joins" ON "conversations"."id" = "conversation_joins"."conversation_id" WHERE "conversation_joins"."user_id" = 980190962 AND (last_message_at > '2014-10-05 11:46:22 -0500')结果是
[#<Conversation id: 980190962, last_message_id: 298486374, user_ids: nil, last_message_at: "2014-10-05 15:48:22", message_count: 2, created_at: "2014-10-05 16:48:22", updated_at: "2014-10-05 16:48:22", key: "298486374,980190962">]请注意,返回的会话的last_message_at日期/时间为"2014-10-05 15:48:22“,查询正在查找"2014-10-05 11:46:22-0500”,即"2014-10-05 16:46:22“,这意味着不应该返回。为了证实这一点,我做了同样的事情,看X小时前,对话没有回复,一旦我击中前6小时,这是符合我的时区推测。
在创建查询之前,我是否需要显式地将控制器中的日期/时间更改为UTC,还是rails应该为我这样做,因为时区已经包括在内了?我的Rails版本是3.2.13
发布于 2014-10-05 17:15:41
查询的代码必须在将日期发送到where调用之前将日期转到UTC。ActiveRecord不转换查询参数。
https://stackoverflow.com/questions/26205108
复制相似问题