Joe*_*Joe 7 ruby-on-rails ruby-on-rails-3
我正在寻找一种方法来构建一个查询,比较同一记录的两个属性,而不先拉取记录和比较后查询.我的具体情况可能会有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">
Run Code Online (Sandbox Code Playgroud)
Rails 3 +,ActiveRecord,MySQL.
更新:正如评论员Matzi所指出的,以下在使用sqlite时有效,但不是mysql:
User.where("created_at == updated_at")
Run Code Online (Sandbox Code Playgroud)
解决:简单的错误,ruby vs sql.
Sqlite可以使用:
User.where("created_at == updated_at")
Run Code Online (Sandbox Code Playgroud)
但MySQL要求:
User.where("created_at = updated_at")
Run Code Online (Sandbox Code Playgroud)
如果要以通用方式执行此操作,则应使用ARel远离特定的数据库实现.就像是
users = User.arel_table
User.where(users[:created_at].eq(users[:updated_at]))
Run Code Online (Sandbox Code Playgroud)
会工作