Je veux trier par deux colonnes, l'une est un DateTime ( updated_at
) et l'autre est un Decimal (Price)
Je voudrais pouvoir trier d'abord par updated_at, puis, si plusieurs éléments se produisent le même jour, trier par prix.
ruby-on-rails
NullVoxPopuli
la source
la source
:order => ["DATE(#{table_name}.updated_at)", :price]
(Notez que:price
c'est un symbole.)order
comme ça:Model.all(:order => "day asc, `order` asc")
Dans Rails 4, vous pouvez faire quelque chose de similaire à:
foo
etbar
sont des colonnes dans la base de données.la source
fera l'affaire.
Mettre à jour:
est la voie à suivre pour Rails 3. (Merci @cpursley )
la source
Thing.all.order("updated_at DESC, price ASC")
Thing.order("LOWER(name), number")
.Interface de requête d'enregistrement actif vous permet de spécifier autant d'attributs que vous souhaitez ordonner votre requête:
ou si vous voulez être plus précis (merci @ zw963 ):
Bonus: après la première requête, vous pouvez enchaîner d'autres requêtes:
la source
model
demodels
sorte qu'une personne sache qu'il est pluralisé. Juste une suggestion.:asc
au lieu deasc
:Model.order({price: :desc}, {date: :desc}, {price: :asc})
En fait, il existe de nombreuses façons de le faire en utilisant Active Record. Celui qui n'a pas été mentionné ci-dessus serait (dans divers formats, tous valides):
C'est peut-être plus bavard, mais personnellement, je trouve que c'est plus facile à gérer. SQL est produit en une seule étape:
Ainsi, pour la question initiale:
Vous n'avez pas besoin de déclarer le type de données, ActiveRecord le fait facilement, tout comme votre DB Engine
la source
Model.order(foo: :asc).order(:bar => :desc).order(:etc)
? L'ordre des clauses d'ordre dans le SQL est le contraire de ce que j'obtiens quand je cours.to_sql
dessus.la source
Aucun de ceux-ci n'a fonctionné pour moi! Après exactement 2 jours de recherche de haut en bas sur Internet, j'ai trouvé une solution !!
disons que vous avez de nombreuses colonnes dans la table products, y compris: special_price et msrp. Ce sont les deux colonnes avec lesquelles nous essayons de trier.
D'accord, tout d'abord dans votre modèle, ajoutez cette ligne:
Deuxièmement, dans le contrôleur de produit, ajoutez où vous devez effectuer la recherche:
la source