2017-10-07 2 views
1

J'ai une page avec deux collections d'articles.Kaminari combiner deux collections et placer le titre entre

def index 
    @collection1 = Model.collection1 
    @collection2 = Model.collection2 
end 

Je suis au courant de la façon de les combiner pour paginer avec Kaminari, mais je dois placer un en-tête <h1>collection 2</h1> avant que les éléments de @collection2 commence (le cas échéant).

La page serait quelque chose comme ceci:

..Item from collection 1.. 
..Item from collection 1.. 
..Item from collection 1.. 
<h1>collection 2</h1> 
..Item from collection 2.. 
..Item from collection 2.. 

Im ayant du mal à trouver un moyen de le faire. Une idée?

Répondre

0

J'ai trouvé la solution suivante.

def index 
    @collection1 = Model.collection1 
    @collection2 = Model.collection2 
    @collection1_paginated = @collection1.page(params[:page]) 
    @collection2_paginated = Kaminari.paginate_array(@collection1 + @collection2).page(params[:page]) 
    .padding(@collection1_paginated.size) 
    .take(@collection1_paginated.limit_value - @collection1_paginated.size) 
    @collection1_or_collection2 = Kaminari.paginate_array(@collection1 + @collection2).page(params[:page]) 
end 

Et dans les vues que vous pouvez faire:

= render partial: 'model', collection: @collection1_paginated 
- display_collection_2_heading? 
    h1 collection 2 
= render partial: 'model', collection: @collection2_paginated 

= paginate @collection1_or_collection2 

Pour afficher la Collection 2 rubrique créer l'aide suivante.

def display_collection_2_heading? 
    @collection1.present? && ((@collection1.count/@collection1_paginated.limit_value)+1) == @collection1_paginated.current_page 
end 

Ce aides fait que le cap ne va qu'une seule fois après le dernier élément de @ collection1.