2016-06-01 4 views
1

私はwill_paginateの宝石を使用しています。私はモデルの関連付けを使ってそれを利用しようとしています。今、グループと投稿のモデルがあり、各グループには投稿のリストがあります。しかし、will_paginateを使ってこれらのモデルを連鎖しようとすると、うまく動作しません。しかし私はGroup.find(15).posts.order('created_at DESC')と私の端末でこれをテストし、それは動作します。私が何かを逃しているのか、それとも私がどのように部分的なものを扱っているのかがわからない場合。will_paginate gem with model associations

グループshow.html.erb

<%= render "posts/index" %> 

ポスト_index.html.erb

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

ポストは

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

投稿

を_post.html.erb _posts.html.erb
... 
<%= post.caption %> 

投稿

$('#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(); 
} 
}); 

グループコントローラ

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

をindex.js.erb私はまた@posts = Post.paginate(page: params[:page], per_page: 3).order('created_at DESC')を試みたが、動作するようには思えません。私の投稿のリストは、降順で並べることも、3つにグループ化することもありません。複数のモデルを使用するときにこの宝石をどのように活用するかについてのアドバイスはありますか?

答えて

1

だから、問題は、あなたが正しく@posts設定されているが、その後、代わりにあなたがここのビューでは、@group.postsを反復それを使用することです:

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

# 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 %> 

は、代わりにこれを行います<%= will_paginate @posts %>部分のみがナビゲーションコントロールを描画することに注意してください。投稿のリストはrender posts/postsから来ています。

+0

驚くばかり!それがトリックでした。今私は、私が持っているindex.js.erbとscroll.jsファイルを使って連続スクロール機能を動作させることに問題があります。私はこれらの機能を動作させましたが、すべてをグループに抽象化してモデル結合を使用しています。 – user3318660

+0

私は連続スクロールでは役に立たないと思っていますが、新しい質問を書くと、できる人がいると確信しています! –

+0

ありがとう!私はしばらくそれに取り組んでみて、私がそれを理解できるかどうかを見てみましょう。あなたの助けをお寄せいただきありがとうございました。 – user3318660

1

あなたのコードで使用しているのと同じように、ページ番号呼び出しはpaginate(:page => params[:page], :per_page => 10)で、paginate(page: params[:page], per_page: 3)ではありません。

これはあなたの問題がある場所です。それはそれを修正しない場合は、あなたも試すことができます。

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

を私は自分のアプリケーションでページネーションを使用するときに私がやることの一つは、私は私のクエリの結果を得て行われていた後にのみ、ページ付けすることです。

+0

まだ運がありません。私は 'Group.find(15).posts.order( 'created_at DESC')'を実行しているとき、これが私のターミナルでなぜうまくいかないのか混乱しています。例えば – user3318660

+0

あなたのビューコードは見えますか?あなたは '@ posts'を繰り返します。 – ollaollu

+0

私は元の投稿を更新し、より多くのコードを追加しました。追加情報が必要な場合はお知らせください。 – user3318660

関連する問題