2012-07-07 24 views
7

Estoy buscando una manera de construir una consulta que compara dos atributos del mismo registro, sin antes tirar el registro y la comparación posterior a la consulta. Mi caso específico podría tener 10k de registros, por lo que repetirlos no es una opción.Rails consulta activerecord comparar dos atributos del mismo registro

Ejemplo: Encontrar este registro mediante la consulta .donde 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"> 

rieles 3+, ActiveRecord, MySQL.

Actualización: Como commentor Matzi señala, lo siguiente es válido cuando se utiliza SQLite, pero no MySQL:

User.where("created_at == updated_at") 

Resuelto: error simple, rubí vs SQL.

SQLite puede utilizar:

User.where("created_at == updated_at") 

pero MySQL requiere:

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

¿Cuál es el problema? Puedes usar '.where' para esto. – Matzi

+0

Eso es lo que esperaba, pero he estado buscando con los términos incorrectos. ¿Le importaría proporcionar un ejemplo rápido o un enlace a la documentación relevante? Gracias de antemano – Joe

+1

Esto debería funcionar: 'Users.where (" created_at == updated_at ")' – Matzi

Respuesta

7

Si usted quiere hacer esto de una manera genérica, se debe utilizar Arel para alejarse de una aplicación de base de datos específica. Algo así como

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

funcionaría

+0

Tenga en cuenta que Arel es una API privada y, aunque no ha cambiado a menudo en los últimos años, no hay garantía de que no se rompa entre las versiones menores de Rails. –

Cuestiones relacionadas