2010-03-31 59 views
1
class Person 
    belongs_to :team 

class Status 
    #has last_updated property 

class Team 
    has_many :members, :class => "Person" 

好的,所以我有一个团队类,其中有许多人,每个人都有一个状态,每个状态都有一个last_updated属性。由协会的财产订购集合

我目前呈现的部分用类似的集合:

=render :partial => "user", :collection => current_user.team.members 

现在我该怎样去通过状态类的LAST_UPDATED性质分类收集?

在此先感谢!

p.s. 我刚刚从内存中编写了ruby代码,这只是一个例子,并不是要编译,但我希望你明白!

+0

需要补充'has_one:status'给你的Person类? – Veger 2010-03-31 22:35:08

回答

0

当你得到teammembers,你需要加入status把它拉在创建带来的成员和:joins => :status,然后:order_by => 'statuses.last_updated'在团队named_scope(Rails的2.X)。 (也从内存中写入)

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") 
+0

假设'时间戳记'被添加到人员表格并且未使用状态表格。除非存储更多状态信息,否则更可取。 – Veger 2010-03-31 22:46:39

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