我可以按关联对象的属性对对象列表进行排序吗?
例如,使用以下类
class RosterSlot < ActiveRecord::Base
belongs_to :event
belongs_to :skill
belongs_to :person
end
我想做点什么 RosterSlot.find(:all,:order =&gt; skill.name)
这意味着activerecord需要进行连接和订购。
有什么想法吗?
答案 0 :(得分:4)
是的,您可以使用:include选项进行连接。
RosterSlot.find(:all, :include => [:skill], :order => "skills.name ASC")
:order选项采用SQL片段,因此技能是对多个数据库表名的引用。
:include包含一系列活动记录关联。
有关详细信息,请参阅http://www.railsbrain.com/api/rails-2.3.2/doc/index.html?a=M002313&name=find。
答案 1 :(得分:3)
您也可以使用sort方法在ruby中执行此操作。
RosterSlot.all.sort { |x,y| x.skill.name <=> y.skill.name }
我个人会让你的db进行排序,但是这个方法可以用来排序模型对象的结果集,这些结果集是通过ActiveRecord :: Base查找的方法返回的。