按关联对象的属性排序对象列表

时间:2009-05-13 14:18:25

标签: ruby-on-rails ruby activerecord

我可以按关联对象的属性对对象列表进行排序吗?

例如,使用以下类

class RosterSlot < ActiveRecord::Base
  belongs_to :event
  belongs_to :skill
  belongs_to :person
end

我想做点什么     RosterSlot.find(:all,:order =&gt; skill.name)

这意味着activerecord需要进行连接和订购。

有什么想法吗?

2 个答案:

答案 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查找的方法返回的。