Saya ingin mengurutkan menurut dua kolom, satu adalah DateTime ( updated_at
), dan yang lainnya adalah Desimal (Harga)
Saya ingin dapat mengurutkan terlebih dahulu berdasarkan update_at, lalu, jika beberapa item terjadi pada hari yang sama, urutkan berdasarkan Harga.
ruby-on-rails
NullVoxPopuli
sumber
sumber
:order => ["DATE(#{table_name}.updated_at)", :price]
(Perhatikan bahwa itu:price
adalah simbol.)order
seperti ini:Model.all(:order => "day asc, `order` asc")
Di Rails 4 Anda dapat melakukan sesuatu yang mirip dengan:
Model.order(foo: :asc, bar: :desc)
foo
danbar
adalah kolom di db.sumber
Thing.find(:all, :order => "updated_at desc, price asc")
akan melakukan triknya.
Memperbarui:
Thing.all.order("updated_at DESC, price ASC")
adalah cara untuk pergi ke Rails 3. (Terima kasih @purs )
sumber
Thing.all.order("updated_at DESC, price ASC")
Thing.order("LOWER(name), number")
.Antarmuka Kueri Rekaman Aktif memungkinkan Anda menentukan atribut sebanyak yang Anda inginkan untuk mengurutkan kueri Anda:
models = Model.order(:date, :hour, price: :desc)
atau jika Anda ingin lebih spesifik (terima kasih @ zw963 ):
models = Model.order(price: :desc, date: :desc, price: :asc)
Bonus: Setelah kueri pertama, Anda dapat merangkai kueri lain:
models = models.where('date >= :date', date: Time.current.to_date)
sumber
model
kemodels
sehingga seseorang akan tahu itu pluralized. Hanya sebuah saran.:asc
bukanasc
:Model.order({price: :desc}, {date: :desc}, {price: :asc})
Sebenarnya ada banyak cara untuk melakukannya dengan menggunakan Active Record. Salah satu yang belum disebutkan di atas akan menjadi (dalam berbagai format, semuanya valid):
Model.order(foo: :asc).order(:bar => :desc).order(:etc)
Mungkin lebih bertele-tele, tetapi secara pribadi saya merasa lebih mudah untuk mengaturnya. SQL diproduksi hanya dalam satu langkah:
SELECT "models".* FROM "models" ORDER BY "models"."etc" ASC, "models"."bar" DESC, "models"."foo" ASC
Jadi, untuk pertanyaan awal:
Model.order(:updated_at).order(:price)
Anda tidak perlu mendeklarasikan tipe data, ActiveRecord melakukannya dengan lancar, begitu juga DB Engine Anda
sumber
Model.order(foo: :asc).order(:bar => :desc).order(:etc)
? Urutan klausa urutan dalam SQL adalah kebalikan dari apa yang saya dapatkan saat menjalankannya.to_sql
.Model.all(:order => 'updated_at, price')
sumber
Tak satu pun dari ini berhasil untuk saya! Setelah tepat 2 hari mencari dari atas dan bawah melalui internet, saya menemukan solusi !!
katakanlah Anda memiliki banyak kolom di tabel produk termasuk: special_price dan msrp. Ini adalah dua kolom yang kami coba sortir.
Oke, Pertama di Model Anda tambahkan baris ini:
named_scope :sorted_by_special_price_asc_msrp_asc, { :order => 'special_price asc,msrp asc' }
Kedua, di Product Controller, tambahkan di mana Anda perlu melakukan pencarian:
@search = Product.sorted_by_special_price_asc_msrp_asc.search(search_params)
sumber