2011-10-29 5 views
2

私はRubyアプリケーションで私のルビーのためにカミナリの宝石を使用しています(まだwill_paginateを使っている人は、私は切り替えを検討することをお勧めします!KaminariでAjaxページネーションのコントローラとアクションを指定する方法は?

問題は、AJAXページネーションを実行するときにコントローラーアクションを指定したいということです。私は設定した場合、デフォルトでは

<%= paginate @feeds, :param_name => :page, :remote => true%> 

::のような、リモートで作業するために私のページネーションを取得=>真のリモート、そして私の「ページ」のコントローラhome.js.erbファイルに次の行を追加し、それが上の作品私のホームページ。私は参照する部分的なjsを指定する必要はありません。自動的に選択されます。

$('.synopsis').html('<%= escape_javascript render('exchanges/synopsis', :feeds => @feeds)%>'); 
    $('.paginator').html('<%= escape_javascript(paginate(@feeds, :param_name => :page, :remote => true).to_s)%>') 

しかしキャッチは、この「概要」のdivは、私は自分のアプリケーション内の別のページの多くにレンダリングすることを部分的であるということです。したがって、コントローラが私の "ページ"コントローラでないページでは、リモートページネーションは機能しなくなりました。

1つの解決策は、私の多くの異なるコントローラのjs.erbファイルにこれらの2行を追加することです。しかし、それは冗長であり、控えめである。

「ページング」コールでは、コントローラとリモート呼び出しに使用するアクションを指定できます。それで、私は次のような行動をとると思います:

def paginate_remotely 
    respond_to paginate_remotely.js 
end 

どうすればいいですか?このような単純な質問のようですが、私はそれを理解することができませんでした。以下は確かに動作しません:以下のように、のparams仕様:興味がある人のために

<%= paginate @feed_exchanges, :param_name => :exchange_page, :remote => true, :controller => :exchanges, :action => :paginate_remotely %> 

答えて

7

を、答えは下のコントローラとアクションを指定する必要がある

<%= paginate @feed_exchanges, :params => {:controller => :exchanges, :action => :paginate_remotely}, :param_name => :exchange_page, :remote => true %> 

しないでくださいconfig/routes.rbにこのアクションのルートを記述して忘れずに、私の場合はpaginate_remotely.js.erbという名前のjsパーシャルを作成してください。

$('.synopsis').html('<%= escape_javascript render('exchanges/synopsis', :feeds => @feeds)%>'); 
$('.paginator').html('<%= escape_javascript(paginate(@feeds, :param_name => :page, :remote => true).to_s)%>') 
関連する問題