循环遍历两个对象数组,按创建日期排序

时间:2014-01-27 23:07:31

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.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类中提取对象注释类,将它们弹出到同一个数组中,并允许我在我的视图中循环并输出每个,如下所示:

理想的控制器:

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

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

1 个答案:

答案 0 :(得分:2)

你会做这种事情(让你入门)

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

在视图中

%ul= render @everything

确保有一个views / comments / _comment.html.haml和一个views / posts / _post.html.haml文件。

或者你可以渲染一个特定的部分并处理那里的任何差异

%ul= render :partial => shared/everything_item, :collection => @everthing