Ruby on Rails:我如何使用ActiveRecord对两列进行sorting?
我想按两列进行sorting,一个是DateTime( updated_at ),另一个是Decimal(Price) 
我希望能够通过updated_at首先sorting,然后,如果多个项目在同一天发生,按价格sorting。
假设你正在使用MySQL,
 Model.all(:order => 'DATE(updated_at), price') 
 注意与其他答案的区别。  updated_at列将是一个完整的时间戳,所以如果你想根据更新的date进行sorting,你需要使用一个函数从时间戳中获取date部分。 在MySQL中,这是DATE() 。 
在Rails 4中,你可以做类似于:
 Model.order(foo: :asc, bar: :desc) 
  foo和bar是db中的列。 
 Thing.find(:all, :order => "updated_at desc, price asc") 
会做的伎俩。
更新:
 Thing.all.order("updated_at DESC, price ASC") 
是目前的路要走。 (谢谢@cpursley )
活动logging查询接口允许您指定尽可能多的属性,您想要订购您的查询:
 models = Model.order(:date, :hour, price: :desc) 
或者如果你想得到更具体的(谢谢@ zw963 ):
 models = Model.order({price: :desc}, {date: :desc}, {price: asc}) 
奖金:第一个查询后,您可以链接其他查询:
 models = models.where("date >= ?", Time.current.to_date) 
实际上有很多方法可以使用Active Record来实现。 上面没有提到的是(各种格式,都是有效的):
 Model.order(foo: :asc).order(:bar => :desc).order(:etc) 
也许它更详细,但我个人觉得更容易pipe理。 SQL只有一步产生:
 SELECT "models".* FROM "models" ORDER BY "models"."etc" ASC, "models"."bar" DESC, "models"."foo" ASC 
因此,对于原来的问题:
 Model.order(:updated_at).order(:price) 
你不需要声明数据types,ActiveRecord可以顺利地完成这个工作,你的数据库引擎也是如此
 Model.all(:order => 'updated_at, price') 
这些都没有为我工作! 经过两天的互联网顶部和底部看,我find了一个解决scheme!
可以说你在产品表中有很多列,包括:special_price和msrp。 这是我们正在尝试整理的两列。
好的,首先在你的模型中添加这一行:
 named_scope :sorted_by_special_price_asc_msrp_asc, { :order => 'special_price asc,msrp asc' } 
其次,在产品控制器中,添加您需要执行search的位置:
 @search = Product.sorted_by_special_price_asc_msrp_asc.search(search_params)