2014-01-27 85 views
1

我想弄清楚如何循环两个对象数组,并在视图中以混合顺序显示它们 - 按它们的创建日期排列。循环通过两个对象数组,按日期创建

这里是我当前的控制器代码,只有根据你所在的类别中显示的帖子,或者基于搜索查询:

def browse 
    @user = current_user 
    if params[:category] 
    @category = Category.find(params[:category]) 
    @posts = @category.posts.page(params[:page]) 
    else 
    @posts = Post.search(params) 
    end 
end  

在视图中,我只是遍历并输出这些像所以:

- if @posts 
    - @posts.each do |post| 
    = post.name 
    = post.content 

我想怎么办,是不是通过实例变量@posts参考柱......我想创建一个新的变量(即:@everything) - 拉动对象来自Post类和Comment类,将它们弹出到相同的数组中,并允许我循环GH和输出分别各我认为,像这样:

理想控制器:

def browse 
    @user = current_user 
    if params[:category] 
    @category = Category.find(params[:category]) 
    @everything = @category.everything(params[:page]) # ... combination of comments and posts 
    else 
    @everything = Everything.search(params) 
    end 
end  

理想视图:

- if @everything 
    - @everything.each do |e| 
    - if e.type == 'post' 
     = e.name 
     = e.content 
    - else 
     = e.comment 

任何帮助/指导理解。我只是不确定如何处理这个问题。

回答

2

你会做这种类型的事情(让你开始)

def browse 
    @user = current_user 
    @everything = @category.posts | @category.comments 
end 

在视图

%ul= render @everything 

确保有一个观点/评论/ _comment.html.haml和views/posts/_post.html.haml文件。

或者你可以呈现一个特定部分和处理在那里

%ul= render :partial => shared/everything_item, :collection => @everthing 
任何差异