在Join语句中忽略ActiveRecord 3.2与3.0 Uniq方法

时间:2013-06-18 17:39:41

标签: ruby-on-rails activerecord

大约两周前,我将我的Rails应用程序从3.0更新到3.2(正好赶上4!叹气。)。无论如何,我刚刚注意到一些奇怪的事情 - 在旧版本中返回正确排序结果的查询在3.2中返回一致不正确的结果。

以下是查询:

@sessions = user.email_sessions.joins(:email_stats)
            .where('email_stats.event_type = "open"')
            .order('email_stats.created_at DESC')
            .uniq

Rails 3.2中的此查询返回以下时间戳:

2013-06-18 12:02:05 -0400
2013-06-18 11:24:22 -0400
2013-06-18 10:41:52 -0400
2013-06-18 12:09:42 -0400
2013-06-18 10:02:26 -0400
2013-06-18 10:24:40 -0400
2013-06-18 08:59:19 -0400
2013-06-18 08:59:19 -0400
2013-06-18 08:51:39 -0400
2013-06-14 15:47:28 -0400

然而在3.0中,我得到了这个:

2013-06-18 12:09:42 -0400
2013-06-18 12:03:23 -0400
2013-06-18 12:02:05 -0400
2013-06-18 11:24:22 -0400
2013-06-18 10:41:52 -0400
2013-06-18 10:24:40 -0400
2013-06-18 10:02:26 -0400
2013-06-18 08:59:19 -0400
2013-06-18 08:59:19 -0400
2013-06-18 08:51:39 -0400

那很好! Rails 3.2很糟糕!任何人都可以对这个问题有所了解吗?

更新:我刚刚想到检查Rails 3.1,我在前往3.2的路上简短地滑过了。我查看了该分支的最新提交,日期很好。只有在3.2上才会出现这个问题。

更新2:感谢Dhurv的问题,我已经在两个版本的Rails中生成了原始SQL。我在第一个上使用了.to_sql方法,然后从日志中提取了后者。 区别:.uniq方法只有3.2 为什么?

Rails 3.2

  

SELECT DISTINCT email_sessions。* FROM email_sessions INNER JOIN email_stats ON email_statsemail_session_id = email_sessionsid WHERE email_sessionsuser_id = 374 AND(email_stats.event_type =“open”)ORDER BY email_stats.created_at DESC

Rails 3.0

  

SELECT email_sessions。* FROM email_sessions INNER JOIN email_stats ON email_statsemail_session_id = email_sessionsid WHERE( email_sessions。user_id = 374)AND(email_stats.event_type =“open”)ORDER BY email_stats.created_at DESC

0 个答案:

没有答案