2017-05-18 2 views
0

J'utilise kaminari gem pour la pagination. Le problème est que j'ai besoin de paginer sur la première page après 4 éléments, et sur toutes les autres pages après 25 éléments. Est-il possible de configurer kaminari pour résoudre mon problème? Voici un usage:Comment installer correctement kaminari

.pagination 
    .pagination__back 
    - if params[:page] && params[:page].to_i > 1 
     = link_to "Previous news", news_items_path(page: params[:page].to_i - 1) 
    - else 
     = "" 
    .pagination__forward 
    - if params[:page] 
     = link_to "Next news", news_items_path(page: params[:page].to_i + 1) 
    - else 
     = link_to "Next news", news_items_path(page: 2) 

Répondre

1

d'abord tout ce que vous pouvez laisser tout le code lié aux pages avant/précédentes. Kaminari résout cela avec son assistant déjà. Pour cette question, à l'intérieur de votre vue, utilisez le code suivant:

= paginate @your_resource 

Cela rendra plusieurs pages = N liens de pagination entourés par une balise HTML5?. (Source)

Pour avoir une ressource paginé, vous voulez ajouter le code suivant à votre contrôleur:

@your_resource = YourResource.order(:foobar).page(params[:page]) 
# params[:page] will get added to each "paginated" request by Kaminari 
# if you use its previously mentioned helper method. 

Maintenant, vous voulez une limite dynamique. Pour cette question, je suggère d'ajouter quelque chose comme ceci:

def index 
    @your_resource = YourResource.order(:foobar).page(params[:page]).per(dynamic_limit(params[:page])) 
end 

private 
def dynamic_limit(current_page = 1) 
    if current_page == 1 
    return 4 
    else 
    return 25 
    end 
end 

De cette façon, vous vérifierez la page en cours, et si elle est la première page, il limiterez les résultats à 4. Dans le cas contraire, 25.