ページ分割にKaminariプラグインを使用しています。私は自分のアプリケーションをAjaxifingしていて、問題が発生しました。私は、データをフィルタリングするためのフォーム付きのデータとページングされたデータ(両方ともAjax経由)を持っています。開始ページ付けはうまく動作し、特定のページのURLは '/ admin/rooms?page = X'です。 ajaxが '/ admin/rooms/filter?page = X'のURLの変更をフィルタリングした後。 私はでページ付けたときにトリガするアクションを指定することができます。RailsでAjaxを呼び出した後でページネーションが機能しない
<%= paginate @rooms, :params => {:controller => 'rooms', :action => 'index'}, :remote => true %>
が、その後、変数@roomsはインデックスにresetted取得し、私は再びフィルタリングされていないデータをページ付け。
どうすればいいですか?
ここではいくつかのコード
rooms_controller.rbです: index.html.erb
class Admin::RoomsController < AdminController def index @rooms = Room.all @rooms = Kaminari.paginate_array(@rooms).page(params[:page]).per(5) @filter_values = [['Room number', 'room_number'], ['Person count', 'person_count'], ['Room class', 'room_class']] end def filter case params[:filter_by] when 'room_number' @rooms = Room.find(:all, :conditions => ["CAST(room_number AS VARCHAR) LIKE ?", "#{params[:filter_value]}%"]) when 'person_count' @rooms = Room.find(:all, :conditions => ["person_count LIKE ?", "#{params[:filter_value]}%"]) else @rooms = Room.joins(:room_class).where("lower(class_name) LIKE '#{params[:filter_value]}%'") end @rooms = Kaminari.paginate_array(@rooms).page(params[:page]).per(5) respond_to do |format| format.html { redirect_to admin_rooms_path } format.js end end
:
<%= label_tag 'Filter: ' %> <%= form_tag(filter_admin_rooms_path, :remote => true) do %> <%= select_tag :filter_by, options_for_select(@filter_values) %> <%= text_field_tag :filter_value %> <%= submit_tag 'Filter', :disable_with => 'Filtering..' %> <% end %> ... <div id="rooms_list"> <%= render 'admin/rooms/shared/rooms_list' %> </div>
_rooms_list.html.erb:インデックスに再びパラメータを渡すと「部屋番号のインデックス」へのルートにページ付け強制することで解決
<div id="paginator"> <%= paginate @rooms, :remote => true %> </div> <table class="table_listing" style="width: 60%"> ... </table>
これは本当に推測です(今のところ答えはありません)が、あなたのコードを見て、私は '#paginate'ビューメソッドのKaminariの' params'属性を通してフィルタ変数を渡さなければならないと思います。 '<%= paginate @rooms、:params => {:filter_by => params [:filter_by]、...}、:remote => true%>'のようなものです。 – polarblau
私はインデックスメソッドに引数を渡すことに疑問を抱いていましたが(何とか最初の試みでこれに失敗しました)、私はもう一度それに行きましたあなたのポストの後に...それは動作します。 :) – Dedemonn