2017-05-14 2 views
1

Je suis en train de créer un centre de notification qui ont pagination (via Kaminari) comme facebook.comment utiliser pagination Kaminari dans l'en-tête

Je souhaite que ce centre affiche la pagination à partir de n'importe quelle page (ce centre est contenu dans un fichier d'en-tête).

Maintenant, j'ai écrit le code ci-dessous, puis il montre de façon appropriée quand j'accède à home.html Mais sa pagination ne fonctionne pas dans une autre page (par exemple, views/test/test.html.erb). Probablement, ajax semble ne pas pouvoir lire le fichier js, donc si je mets le fichier test.js.erb dans les vues/test, cela fonctionnera. En ce qui concerne le fonctionnement et la maintenance, cela n'est pas souhaitable. Comment puis-je lire la pagination en utilisant un seul fichier js.Bar? merci pour votre aide

Le code source est ci-dessous.

Modèle

app/modèles/item.rb

class Item < ActiveRecord::Base 
    paginates_per 50 
end 

Contrôleur


app/contrôleur/items_controller.rb

before_action :pagination 


def pagination 
    @items = Item.page params[:page] 
end 

Voir


app/views/statique/home.html.erb

<%= render 'static/header' %> <!-- reading partial header--> 

app/views/statique/_header.html.erb

<div><%= render 'application/items', items:@items %></div>  

application /views/static/home.js.erb

$('#items').append("<%= escape_javascript(render '_items', object: @items) %>"); 
    $("#more_link").replaceWith("<%= escape_javascript(link_to_next_page(@items, 'more', remote: true, id: 'more_link')) %>"); 

app/views/application/_items.html.erb

<div id="items"> 
    <%= render 'items' %> 
</div> 
<%= link_to_next_page @items, 'more', remote: true, id: 'more_link' %> 

app/views/application/__ items.html.erb

<% @items.each do |item| %> 
    <div><%= item.name %></div> 
<% end %> 

Répondre

0

Je vous suggère de créer un séparé action du contrôleur pour gérer les demandes ajax:

class ItemsController 
    def paginate 
    end 
end 

puis déplacer js.erb code sous views/items/paginate.js.erb.

aide de Kaminari link_to_next_page utilise link_to l'intérieur il devrait donc être possible d'ajouter controller et action params à lier:

<%= 
    link_to_next_page @items, 'more', 
    controller: 'items', 
    action: 'paginate', 
    remote: true, 
    id: 'more_link' 
%> 
+0

Merci pour votre réponse! En plus de votre solution, mise en place du routage, enfin, cela a fonctionné parfaitement! Un merci spécial à vos commentaires sur link_to helper! –