Ruby on Rails: how do I sort with two columns using ActiveRecord?

In Rails 4 you can do something similar to:

Model.order(foo: :asc, bar: :desc)

foo and bar are columns in the db.


Thing.find(:all, :order => "updated_at desc, price asc")

will do the trick.

Update:

Thing.all.order("updated_at DESC, price ASC")

is the Rails 3 way to go. (Thanks @cpursley)


Active Record Query Interface lets you specify as many attributes as you want to order your query:

models = Model.order(:date, :hour, price: :desc)

or if you want to get more specific (thanks @zw963 ):

models = Model.order(price: :desc, date: :desc, price: :asc) 

Bonus: After the first query, you can chain other queries:

models = models.where('date >= :date', date: Time.current.to_date)

Assuming you're using MySQL,

Model.all(:order => 'DATE(updated_at), price')

Note the distinction from the other answers. The updated_at column will be a full timestamp, so if you want to sort based on the day it was updated, you need to use a function to get just the date part from the timestamp. In MySQL, that is DATE().