Quiero ordenar por dos columnas, una es DateTime ( updated_at
) y la otra es Decimal (Price)
Me gustaría poder ordenar primero por updated_at, luego, si ocurren varios elementos el mismo día, ordenar por Precio.
ruby-on-rails
NullVoxPopuli
fuente
fuente
:order => ["DATE(#{table_name}.updated_at)", :price]
(Tenga en cuenta que:price
es un símbolo).order
así:Model.all(:order => "day asc, `order` asc")
En Rails 4 puedes hacer algo similar a:
foo
ybar
son columnas en el archivo db.fuente
hará el truco.
Actualizar:
es el camino a seguir de Rails 3. (Gracias @cpursley )
fuente
Thing.all.order("updated_at DESC, price ASC")
Thing.order("LOWER(name), number")
.Active Record Query Interface le permite especificar tantos atributos como desee para ordenar su consulta:
o si quieres ser más específico (gracias @ zw963 ):
Bonificación: después de la primera consulta, puede encadenar otras consultas:
fuente
model
amodels
para que una persona sepa que está pluralizada. Sólo una sugerencia.:asc
lugar deasc
:Model.order({price: :desc}, {date: :desc}, {price: :asc})
En realidad, hay muchas formas de hacerlo utilizando Active Record. Uno que no se ha mencionado anteriormente sería (en varios formatos, todos válidos):
Tal vez sea más detallado, pero personalmente me resulta más fácil de manejar. SQL se produce en un solo paso:
Por lo tanto, para la pregunta original:
No necesita declarar el tipo de datos, ActiveRecord lo hace sin problemas, y también lo hace su motor de base de datos
fuente
Model.order(foo: :asc).order(:bar => :desc).order(:etc)
? El orden de las cláusulas de orden en SQL es el opuesto al que obtengo cuando ejecuto.to_sql
eso.fuente
¡Ninguno de estos funcionó para mí! ¡Después de exactamente 2 días de buscar arriba y abajo en Internet, encontré una solución!
digamos que tiene muchas columnas en la tabla de productos, incluyendo: special_price y msrp. Estas son las dos columnas con las que estamos tratando de ordenar.
Bien, primero en su modelo agregue esta línea:
En segundo lugar, en el Controlador de producto, agregue dónde necesita realizar la búsqueda:
fuente