我正在寻找一种方法来构建一个查询,比较同一记录的两个属性,而不先拉取记录并比较后查询。我的具体情况可能会有10k的记录,因此不能选择迭代每个记录。
示例:通过查询.where 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")
解决:简单的错误,ruby vs sql。
Sqlite可以使用:
User.where("created_at == updated_at")
但MySQL需要:
User.where("created_at = updated_at")
答案 0 :(得分:7)
如果您想以通用方式执行此操作,则应使用ARel来远离特定的数据库实现。像
这样的东西users = User.arel_table
User.where(users[:created_at].eq(users[:updated_at]))
会起作用