Railsアプリケーションでwill_paginateを使用しましたが、ページネーション番号をクリックしてもページがリロードされないブロック内でwill_paginateを使用する必要がある状況に遭遇しました。ページのリロード……?
2 に答える
ページネーションJavaScriptファイルがあります
だから私の index.html.erb ファイルに追加しました
<%=javascript_include_tag "pagination.js"%>
pagination.js ファイル内
$(function(){
$(".pagination a").live("click", function() {
$.get(this.href, null, null, "script");
return false;
});
});
index アクションでこのようなモデル データを取得しました。
@employees = Employee.where("!is_deleted=?",1).paginate(:page=>params[:page] ,:per_page => 20)
これをindex.js.erbファイルに追加しました
$("#employee_table").html("<%= escape_javascript(render("employees")) %>");
ここで、employee_table は、データを表示する div の ID です。
config/initializers に will_paginate_array_fix.rb というファイル名があります。
このファイルは次のようになります
require 'will_paginate/array'
それが、配列もサポートしているため、機能する場所を使用しているにもかかわらずです。
これが私が物事を設定する方法です:
Item
私がモデルを持っているとしましょう。
最初にインデックス ビューで、ページネーションが実行されるパーシャルをレンダリングします。
<div id="list">
<%= render 'items/paginate_list', :items => @items %>
</div>
will_paginate
パーシャルでは、ステートメントに css クラスを追加します。
items/_paginate_list.html.erb
<%= will_paginate items, :param_name => :page, :class => 'my_pagination' %>
# code displaying each item...
my_pagination
次に、application.js で、クラスのリンクをクリックするイベントをキャッチしました。
$(document).ready(function(){
$('.my_pagination a').live("click",function(){
$('.my_pagination').html('Page is loading, please wait...');
$.get(this.href, null, null, 'script');
return false;
});
});
$.get
このようにして、ステートメントを介してajaxでコントローラーへの呼び出しが実行されます。ページネーション バーには、ページが読み込まれているというメッセージが表示されます。
コントローラーでは、いつものようにしています:
class ItemsController < ApplicationController
def index
@items=Item.paginate(:page => params[:page], :per_page => 10)
end
end
最後に、埋め込まれた js で、リロードされるページネーションでパーシャルをフィードします。
items/index.js.erb
$("#list").html("<%= escape_javascript(render 'items/paginate_list', :items => @items) %>");
この助けを願っています。
実際、それは大まかにRailscastの簡単な要約です;-)