2012-07-07 75 views
7

我正在寻找一种方法来构建一个查询,该查询比较同一记录的两个属性,而无需先拉动记录并比较后查询。我的具体情况可能会有10万条记录,因此遍历每条记录不是一种选择。Rails activerecord查询比较同一记录的两个属性

例子:通过查询。哪里的updated_at == created_at

#<User id: 1, name: "xxx", created_at: "2012-07-01 12:00:00", updated_at: "2012-07-01 12:00:00"> 

Rails的3+,ActiveRecord的,MySQL的发现这条记录。

更新:由于评注Matzi指出,以下使用SQLite时是有效的,但不是MySQL的

User.where("created_at == updated_at") 

解决:简单的错误,红宝石VS SQL。

SQLite的可以使用:

User.where("created_at == updated_at") 

但MySQL的要求:

User.where("created_at = updated_at") 
+0

问题是什么?你可以使用'.where'来实现。 – Matzi 2012-07-07 18:45:30

+0

这就是我所希望的,但一直在用错误的术语进行搜索。您介意提供一个快速示例或链接到相关文档?在此先感谢 – Joe 2012-07-07 18:49:07

+1

这应该工作︰'Users.where(“created_at == updated_at”)' – Matzi 2012-07-07 18:55:00

回答

7

如果你想这样做,在一个通用的方法,你应该使用AREL获取某个特定的数据库实现了。像

users = User.arel_table 
User.where(users[:created_at].eq(users[:updated_at])) 

东西会工作

+0

请注意,Arel是一个私有API,尽管在过去几年里它并没有经常发生变化,但不能保证它不会在次要版本的Rails之间中断。 – 2017-06-29 17:46:50

相关问题