2012-08-17 39 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的集合,并且应该能够简单地呈现该集合。