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:pricees un símbolo).orderasí:Model.all(:order => "day asc, `order` asc")En Rails 4 puedes hacer algo similar a:
fooybarson 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
modelamodelspara que una persona sepa que está pluralizada. Sólo una sugerencia.:asclugar 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_sqleso.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