class Person
belongs_to :team
class Status
#has last_updated property
class Team
has_many :members, :class => "Person"
好的,所以我有一个Team类,里面有很多人,每个人都有一个状态,每个状态都有一个last_updated属性。
我目前使用类似于:
的集合渲染部分 =render :partial => "user", :collection => current_user.team.members
现在我如何通过Status类的last_updated属性对集合进行排序?
提前致谢!
P.S。 我刚刚从内存中编写了ruby代码,这只是一个例子,它不是要编译的,但我希望你能得到这个想法!
答案 0 :(得分:2)
除了提到的选项,您可能还想使用 named_scope :
class Member
named_scope :recently_active, :joins => :status, :order => "statuses.updated_at DESC"
end
# now you can do:
current_user.team.members.recently_active
如果您总是对这样的成员进行排序,请考虑使用default_scope
class Member
default_scope :joins => :status, :order => "statuses.updated_at DESC"
end
# and you can use this client code
current_user.team.members
答案 1 :(得分:1)
您有两种可能性:
1)更改关联定义以添加order
子句。
class Team
has_many :members, :class => "Person", :joins => :status,
:order => "statuses.updated_at DESC"
end
current_user.team.members # ordered by updated_at
2)将:order
子句传递给members
方法。
如果order by
列根据上下文发生更改,则此方法适用。
current_user.team.members( :joins => :status,
:order => "statuses.updated_at DESC")
答案 2 :(得分:0)
获得members
的{{1}}后,您需要加入team
才能将其拉入。在Team上创建一个named_scope(Rails 2.x),引入成员和status
,然后是:joins => :status
。 (也是从记忆中写的)