3

私はRubyonRailsアプリケーションにKaminarigemを使用しています(will_paginateをまだ使用している人は、切り替えを検討することをお勧めします!はるかにクリーンで用途が広いです)。

私が抱えている問題は、AJAXページ付けを行うときにコントローラーアクションを指定したいということです。私のページ付けをリモートで機能させるには、次のようにします。

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

デフォルトでは、:remote => trueを設定し、「pages」コントローラーの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)%>')

しかし、問題は、この「synopsis」divが、アプリケーションのさまざまなページにレンダリングする部分的なものであるということです。そのため、コントローラーが私の「ページ」コントローラーではないページでは、リモートページネーションが機能しなくなります。

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

「paginate」呼び出しで、リモート呼び出しに使用するコントローラーとアクションを指定できるようにしたいと思います。次に、次のようなアクションを作成すると思います。

 def paginate_remotely
     respond_to paginate_remotely.js
 end

どうすればこれを行うことができますか?とても簡単な質問のようですが、私はそれを理解することができませんでした。以下は確かに機能しません:

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

1 に答える 1

8

興味のある方は、次のように :params 仕様でコントローラーとアクションを指定する必要があるというのが答えです。

 <%= 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)%>')
于 2011-10-30T00:23:48.773 に答える