Ich möchte nach zwei Spalten sortieren, eine ist eine DateTime ( updated_at
) und die andere ist eine Dezimalzahl (Price).
Ich möchte in der Lage sein, zuerst nach update_at zu sortieren und dann, wenn mehrere Artikel am selben Tag auftreten, nach Preis zu sortieren.
ruby-on-rails
NullVoxPopuli
quelle
quelle
:order => ["DATE(#{table_name}.updated_at)", :price]
(Beachten Sie, dass dies:price
ein Symbol ist.)order
:Model.all(:order => "day asc, `order` asc")
In Rails 4 können Sie Folgendes tun:
foo
undbar
sind Spalten in der Datenbank.quelle
wird den Trick machen.
Aktualisieren:
ist der Rails 3 Weg zu gehen. (Vielen Dank @cpursley )
quelle
Thing.all.order("updated_at DESC, price ASC")
Thing.order("LOWER(name), number")
.Mit der Active Record Query Interface können Sie so viele Attribute angeben, wie Sie für Ihre Abfrage bestellen möchten :
oder wenn Sie genauer werden möchten (danke @ zw963 ):
Bonus: Nach der ersten Abfrage können Sie andere Abfragen verketten:
quelle
model
,models
damit eine Person weiß, dass er pluralisiert ist. Nur ein Vorschlag.:asc
statt seinasc
:Model.order({price: :desc}, {date: :desc}, {price: :asc})
Tatsächlich gibt es viele Möglichkeiten, dies mit Active Record zu tun. Eine, die oben nicht erwähnt wurde, wäre (in verschiedenen Formaten, alle gültig):
Vielleicht ist es ausführlicher, aber ich persönlich finde es einfacher zu verwalten. SQL wird nur in einem Schritt erstellt:
Also für die ursprüngliche Frage:
Sie müssen den Datentyp nicht deklarieren. ActiveRecord erledigt dies reibungslos, ebenso wie Ihre DB Engine
quelle
Model.order(foo: :asc).order(:bar => :desc).order(:etc)
? Die Reihenfolge der order-Klauseln in SQL ist das Gegenteil von dem, was ich bekomme, wenn ich darauf laufe.to_sql
.quelle
Nichts davon hat bei mir funktioniert! Nachdem ich genau 2 Tage lang über das Internet nach oben und unten geschaut hatte, fand ich eine Lösung !!
Angenommen, die Produkttabelle enthält viele Spalten, darunter: special_price und msrp. Dies sind die beiden Spalten, mit denen wir sortieren möchten.
Okay, fügen Sie zuerst in Ihrem Modell diese Zeile hinzu:
Zweitens fügen Sie im Product Controller hinzu, wo Sie die Suche durchführen müssen:
quelle