Hola, descubrimos la solución a tu interrogante, desplázate y la hallarás un poco más abajo.
Solución:
Prueba esto
User.where("id > ?", 200)
Solo probé esto en Rails 4, pero hay una forma interesante de usar un rango con un where
hash para obtener este comportamiento.
User.where(id: 201..Float::INFINITY)
generará el SQL
SELECT `users`.* FROM `users` WHERE (`users`.`id` >= 201)
Se puede hacer lo mismo por menos que con -Float::INFINITY
.
Acabo de publicar una pregunta similar sobre cómo hacer esto con fechas aquí en SO.
>=
contra >
Para evitar que las personas tengan que buscar y seguir la conversación de los comentarios, aquí están los aspectos más destacados.
El método anterior solo genera un >=
consulta y no a >
. Hay muchas maneras de manejar esta alternativa.
Para números discretos
Puedes usar un number_you_want + 1
estrategia como la anterior donde estoy interesado en Usuarios con id > 200
pero en realidad busca id >= 201
. Esto está bien para números enteros y números en los que puede incrementar en una sola unidad de interés.
Si tiene el número extraído en una constante bien nombrada, esta puede ser la más fácil de leer y comprender de un vistazo.
lógica invertida
Podemos usar el hecho de que x > y == !(x <= y)
y usa la cadena where not.
User.where.not(id: -Float::INFINITY..200)
que genera el SQL
SELECT `users`.* FROM `users` WHERE (NOT (`users`.`id` <= 200))
Esto toma un segundo adicional para leer y razonar, pero funcionará para valores o columnas no discretos donde no puede usar el + 1
estrategia.
mesa arela
Si quieres ponerte elegante puedes hacer uso de la Arel::Table
.
User.where(User.arel_table[:id].gt(200))
generará el SQL
"SELECT `users`.* FROM `users` WHERE (`users`.`id` > 200)"
Los detalles son los siguientes:
User.arel_table #=> an Arel::Table instance for the User model / users table
User.arel_table[:id] #=> an Arel::Attributes::Attribute for the id column
User.arel_table[:id].gt(200) #=> an Arel::Nodes::GreaterThan which can be passed to `where`
Este enfoque le dará la exacto SQL que le interesa, sin embargo, no muchas personas usan la tabla Arel directamente y pueden encontrarla desordenada y/o confusa. Tú y tu equipo sabrán qué es lo mejor para ti.
Prima
A partir de Rails 5, ¡también puede hacer esto con fechas!
User.where(created_at: 3.days.ago..DateTime::Infinity.new)
generará el SQL
SELECT `users`.* FROM `users` WHERE (`users`.`created_at` >= '2018-07-07 17:00:51')
Doble Bono
Una vez que se lance Ruby 2.6 (25 de diciembre de 2018), podrá usar la nueva sintaxis de rango infinito. En vez de 201..Float::INFINITY
podrás simplemente escribir 201..
. Más información en esta publicación de blog.
Un mejor uso es crear un ámbito en el modelo de usuario where(arel_table[:id].gt(id))