2010-03-31 85 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