2014-01-27 1 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, выталкивает их в один и тот же массив и позволяет мне зацикливаться СТГ и выход каждого соответственно, на мой взгляд, как это:

Идеальный контроллер:

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