2016-06-01 9 views
1

Ich benutze das Juwel wille_paginate und ich versuche, es mithilfe von Modellassoziationen zu verwenden. Im Moment habe ich Gruppen- und Post-Modelle, bei denen jede Gruppe eine Liste mit Posts hat. Wenn ich jedoch versuche, diese Modelle mithilfe von will_paginate zu verketten, funktioniert es nicht. Noch teste ich das in meinem Terminal mit Group.find(15).posts.order('created_at DESC') und es funktioniert. Ich bin mir nicht sicher, ob ich etwas vermisse oder ob es damit zu tun hat, wie ich mit den Teiltönen umgehe.will_paginate gem unter Verwendung von Modellassoziationen

Gruppe show.html.erb

<%= render "posts/index" %> 

Beitrag _index.html.erb

<%= render 'posts/posts' %> 
... 
<%= will_paginate @posts %> 

Beitrag _posts.html.erb

<% @group.posts.each do |post| %> 
    <%= render 'posts/post', post: post, group: @group %> 
<% end %> 

Beitrag _post.html.erb

... 
<%= post.caption %> 

Beitrag index.js.erb

$('#posts').append("<%= escape_javascript(render 'posts')%>"); 
$('.pagination').replaceWith('<%= escape_javascript will_paginate(@posts) %>'); 

scroll.js

$(document).ready(function() { 
if ($('.pagination').length) { 
$(window).scroll(function() { 
    var url = $('.pagination .next_page').attr('href'); 
    if (url && $(window).scrollTop() > $(document).height() - $(window).height() - 50) { 
    $('.pagination').text("Please Wait..."); 
    return $.getScript(url); 
    } 
}); 
return $(window).scroll(); 
} 
}); 

Group Controller

def show 
    @group = Group.find(params[:id]) 
    @posts = @group.posts.paginate(page: params[:page], per_page: 3).order('created_at DESC') 
end 

Ich habe auch versucht @posts = Post.paginate(page: params[:page], per_page: 3).order('created_at DESC'), aber es scheint nicht zu funktionieren. Meine Liste der Posts ist nicht in absteigender Reihenfolge sortiert, noch sind sie zu dritt gruppiert. Irgendwelche Ratschläge, wie man dieses Juwel benutzt, wenn man mehrere Modelle benutzt?

Antwort

1

Das Problem ist also, dass Sie Einstellungen bis @posts richtig, aber dann, anstatt sie zu verwenden Sie iterieren @group.posts, hier in den Ansichten:

# posts/_index.html.erb 
<%= render 'posts/posts' %> 
... 
<%= will_paginate @posts %> 

# posts/_posts.html.erb 
<% @group.posts.each do |post| %> 
    <%= render 'posts/post', post: post, group: @group %> 
<% end %> 

dieses Stattdessen tun:

# posts/_posts.html.erb 
<% @posts.each do |post| %> 
    <%= render 'posts/post', post: post, group: @group %> 
<% end %> 

Beachten Sie, dass die <%= will_paginate @posts %> Teil nur die Navigationssteuerelemente zeichnet. Die Liste der Beiträge stammt aus der render posts/posts.

+0

Super! Das hat den Trick gemacht. Jetzt habe ich Probleme, meine kontinuierliche Scroll-Funktion über die Dateien index.js.erb und scroll.js, die ich habe, funktionieren zu lassen.Ich hatte diese Funktionen in Arbeit, bin aber dabei, alles in Gruppen zu abstrahieren und dabei Modellzuordnungen zu verwenden. – user3318660

+0

Ich glaube nicht, dass ich beim kontinuierlichen Scrollen helfen kann, aber wenn Sie eine neue Frage dafür schreiben, bin ich sicher, dass es Leute gibt, die es können! –

+0

Danke! Ich werde versuchen, es für eine Weile anzugehen und sehen, ob ich es herausfinden kann. Vielen Dank für Ihre Hilfe sowie für die Vorschläge auf ollaollu! – user3318660

1

entsprechend den Dokumenten auf dem Edelstein, sollte der paginate Anruf paginate(:page => params[:page], :per_page => 10) sein und nicht paginate(page: params[:page], per_page: 3), wie Sie in Ihrem Code verwendeten.

Das ist, wo Ihr Problem liegen kann. Wenn das nicht hilft, können Sie auch versuchen:

def show 
    @group = Group.find(params[:id]) 
    @posts = @group.posts.order('created_at DESC').paginate(:page => params[:page], :per_page => 3) 
end 

Eine Sache, die ich tun, wenn ich Paginierung verwenden in meine Anwendungen nur Paginieren ist, nachdem ich die Ergebnisse meiner Abfrage fertig bin immer.

+0

Immer noch kein Glück. Ich bin verwirrt, warum dies nicht funktioniert, wie es sollte, und es tut in meinem Terminal, wenn Sie 'Group.find (15) .posts.order ('created_at DESC')' zum Beispiel – user3318660

+0

kann ich Ihren Ansichtscode sehen? wo iteriert über '@ posts' – ollaollu

+0

Ich habe meinen ursprünglichen Beitrag über Hinzufügen von mehr Code aktualisiert. Bitte lassen Sie mich wissen, wenn Sie zusätzliche Informationen benötigen. – user3318660