2012-08-17 27 views
0

我有兩種不同類型的對話,開始和加入。我想把它們放在同一個流中,從最新的到最新的到最底層。也就是說,我希望它們混合在一起,這樣無論是由用戶啓動還是由用戶加入(即由另一個用戶啓動),最新的對話都處於最佳狀態。呈現最新的兩個部分在同一個流

從我的控制器:

def conversations 
    @user = current_user 
    @joined_conversations = @user.received_meeting_requests.paginate(page: params[:page], :conditions => ['state = ?', 'replied']) 
    @started_conversations = @user.sent_meeting_requests.paginate(page: params[:page], :conditions => ['state = ?', 'replied']) 
end 

在我看來,我的渲染這樣的:

<ol class="meetings"> 
    <%= render @started_conversations %> 
    <%= render @joined_conversations %> 
</ol> 
    <%= will_paginate @started_conversations %> 
    <%= will_paginate @joined_conversations %> 
<% end %> 

因此,即使最老的開始談話將是最新加入談話的上方。如何渲染這兩個對象以使它們混合在一起,即最新開始或已加入的對話將始終處於頂層?謝謝!

回答

0

那麼,有幾種方法可以實際去做,但是你需要的是在一個集合中同時進行兩種對話。

現在,你可能只是把兩個現有的集合,把它們放在一起(使用Array工會操作「|」),並訴諸他們:

def conversations 
    @user = current_user 
    @joined_conversations = @user.received_meeting_requests.paginate(page: params[:page], :conditions => ['state = ?', 'replied']) 
    @started_conversations = @user.sent_meeting_requests.paginate(page: params[:page], :conditions => ['state = ?', 'replied']) 
    @conversations = (@joined_conversations | @started_conversations).sort_by{|c| c.created_at} 
end 

然而,由於這種過濾和排序是數據庫的真正用途,我認爲你最好在一個查詢中收集所有與之相關的對話。我想告訴你這個查詢是什麼,但是如果不知道你的模型/表格是什麼,它們是如何關聯的,對於用戶加入或開始對話意味着什麼,以及對於這與Rails的版本和你使用的數據庫有關,因爲它在Rails 3.x和2.x中看起來有點不同。

無論哪種情況,您最終都會得到一個名爲@conversations的集合,並且應該能夠簡單地呈現該集合。

相關問題