Я хочу отсортировать по двум столбцам: один - DateTime ( updated_at
), а другой - десятичный (цена)
Я хотел бы иметь возможность сначала сортировать по updated_at, а затем, если в один день появляется несколько элементов, сортировать по цене.
ruby-on-rails
NullVoxPopuli
источник
источник
:order => ["DATE(#{table_name}.updated_at)", :price]
(Обратите внимание, что:price
это символ.)order
вот так:Model.all(:order => "day asc, `order` asc")
В Rails 4 вы можете делать что-то подобное:
Model.order(foo: :asc, bar: :desc)
foo
иbar
являются столбцами в базе данных.источник
Thing.find(:all, :order => "updated_at desc, price asc")
сделает свое дело.
Обновить:
Thing.all.order("updated_at DESC, price ASC")
это путь Rails 3. (Спасибо @cpursley )
источник
Thing.all.order("updated_at DESC, price ASC")
Thing.order("LOWER(name), number")
.Интерфейс запросов Active Record позволяет вам указать столько атрибутов, сколько вы хотите упорядочить свой запрос:
models = Model.order(:date, :hour, price: :desc)
или, если хотите уточнить (спасибо @ zw963 ):
models = Model.order(price: :desc, date: :desc, price: :asc)
Бонус: после первого запроса вы можете связать другие запросы:
models = models.where('date >= :date', date: Time.current.to_date)
источник
model
на,models
чтобы человек знал, что это множественное число. Просто предложение.:asc
вместоasc
:Model.order({price: :desc}, {date: :desc}, {price: :asc})
На самом деле есть много способов сделать это с помощью Active Record. Тот, который не был упомянут выше, будет (в разных форматах, все допустимы):
Model.order(foo: :asc).order(:bar => :desc).order(:etc)
Может быть, это более многословно, но лично мне легче управлять. SQL создается только за один шаг:
SELECT "models".* FROM "models" ORDER BY "models"."etc" ASC, "models"."bar" DESC, "models"."foo" ASC
Таким образом, для исходного вопроса:
Model.order(:updated_at).order(:price)
Вам не нужно объявлять тип данных, ActiveRecord делает это плавно, как и ваш механизм БД.
источник
Model.order(foo: :asc).order(:bar => :desc).order(:etc)
? Порядок предложений порядка в SQL противоположен тому, что я получаю, когда запускаю его.to_sql
.Model.all(:order => 'updated_at, price')
источник
Ни один из них не помог мне! Ровно через 2 дня поисков в Интернете я нашел решение !!
Допустим, у вас есть много столбцов в таблице продуктов, включая special_price и msrp. Это два столбца, по которым мы пытаемся выполнить сортировку.
Хорошо, сначала в вашей модели добавьте эту строку:
named_scope :sorted_by_special_price_asc_msrp_asc, { :order => 'special_price asc,msrp asc' }
Во-вторых, в Product Controller добавьте, где вам нужно выполнить поиск:
@search = Product.sorted_by_special_price_asc_msrp_asc.search(search_params)
источник