2012-07-07 14 views
7

レコードをプルしてポストクエリーを比較することなく、同じレコードの2つの属性を比較するクエリを作成する方法を探しています。私の特定のケースには10kのレコードが潜在的に存在するため、それぞれを反復することは選択肢ではありません。同じレコードの2つの属性を比較するactiverecordクエリをレンダリングする

例:.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を照会することによって、このレコードを見つけます。

更新:commentor Matziが指摘するようにsqliteのを使用する場合、以下が有効ではなく、mysqlの

User.where("created_at == updated_at") 

を解決:単純なミス、SQL対ルビーを。

Sqliteを使用することができます

User.where("created_at == updated_at") 

が、MySQLが必要です。

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

を働くだろうか?これに '.where 'を使うことができます。 – Matzi

+0

それは私が望んでいたものですが、間違った言葉で検索しています。簡単な例や関連文書へのリンクを提供してもらえますか?おかげで事前に – Joe

+1

これは動作するはずです: 'Users.where(" created_at == updated_at ")' – Matzi

答えて

7

あなたは一般的な方法でこれを実行したい場合は、特定のデータベースの実装から逃げるためにARELを使用する必要があります。

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

ような何かが問題です何

+0

ArelはプライベートAPIであり、ここ数年で頻繁に変更されていませんが、Railsのマイナーバージョン間で折り返される保証はありません。 –

関連する問題