rails query inner find_by ruby-on-rails activerecord

ruby-on-rails - query - rails where



¿Cómo hacer que Active Record se una para devolver objetos únicos? (3)

@dbjohn tiene la idea correcta, pero supongo que quieres evitar la creación de objetos adicionales. Aquí hay una pequeña variante de su solución, dejando que la base de datos le haga la integración:

date = "2013-01-01 00:00:00" User.joins(:orders).where("orders.created_at >= ?", date).distinct

Tenga en cuenta que puede reorganizar el orden de los métodos para que se ajusten a lo que considere más semántico, y ActiveRecord escribirá el mismo SQL para usted.

Tengo una consulta simple: encuentre una lista de usuarios que hicieron un pedido desde el 1 de enero de 2013.

En SQL, es una consulta muy simple.

Pero estoy usando Rails y Active Record.

Así que escribí: User.joins(:orders).where("orders.created_at >= ''2013-01-01 00:00:00''")

En nuestra base de datos, tenemos 100 pedidos realizados desde 01/01/2013 por 75 usuarios. (Algunos usuarios hicieron aparentemente más de un pedido).

Sin embargo, la expresión anterior devuelve 100 usuarios. (Debe haber duplicados)

Intenté User.joins(:orders).where("orders.created_at >= ''2013-01-01 00:00:00''").uniq

Eso tampoco funciona.

¿Cómo puedo obtener los 75 usuarios que han realizado un pedido desde 01/01/2013?



User.joins(:orders). where("orders.created_at >= ''2013-01-01 00:00:00''"). group(''users.id'')

group método de group se encadena a la consulta y le proporciona una lista de registros únicos.