14

Ajax を介してカミナリで複数のページネーションを適用したいのですが、コントローラーのコードは次のとおりです。

def user_note
    @user = current_user
    @notes = Bookmark.where('user_id = ? && note is not NULL',current_user.id).order('created_at DESC').page(params[:page_1]).per(4)

    @bookmarks = Bookmark.where('user_id = ? && note is NULL',current_user.id).order('created_at DESC').page(params[:page_2]).per(4)

    respond_to do |format|
      format.html
      format.xml{ render :xml => @user}
    end   end

ビューの場合、この配列をレンダリングするための2つのパーシャルがあります

<div id="bookmarks">
<%= render :partial =>"users/bookmark",:locals => { :bookmark => @bookmarks} %>
            </div>
<%= paginate @bookmarks,:remote => true, :param_name => 'page' %>

内側のパーシャルは

<% bookmark.each do |bookmar| %>
  <%= render :partial => 'show_bookmark.html.erb' , :locals => { :bookma => bookmar} %>
<%end%>

ページネーション更新用のスクリプトは別ファイルで処理されています

$('#bookmarks').html('<%= escape_javascript render(:partial =>"users/bookmark",:locals => { :bookmark => @bookmarks}) %>');
$('#paginator').html('<%= escape_javascript(paginate(@bookmarks, :remote => true).to_s) %>');

しかし、あらゆることを行っても、ページの状態に更新されたり、ページに含まれたりすることはありません。

4

2 に答える 2

16

この行でパラメータを渡すことができません

$('#paginator').html('<%= escape_javascript(paginate(@bookmarks, :remote => true).to_s) %>');

私はそれがこのようであるべきだと思います

$('#paginator').html('<%= escape_javascript(paginate(@bookmarks, :remote => true, :param_name => 'page_2').to_s) %>');

また、この行で間違ったパラメーターを渡しています

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

このようにする必要があります

<%= paginate @bookmarks,:remote => true, :param_name => 'page_2' %>

また、レスポンスが JS ファイルに正しく送信されているかどうかも確認してください。

于 2012-01-26T13:56:52.590 に答える
5

この質問は、同じページで複数のモデルをページ分割することを検索しているのを見つけました。@notes コレクションのページ付けがどのように機能するかは明確ではありませんが、提示されているように、ソリューションは AJAX を介して @bookmarks コレクションのみをページ付けします。

html を介して両方のコレクションのページネーションを維持したい場合、または js ファイルを変更して両方のコレクションをレンダリングする場合、問題が発生します。

次のような同様の問題に対する解決策を実装しました。

  1. 2 つのパーシャルでテンプレートをレンダリングする html ビュー: 1 つは@notes(ページネーション ヘルパーを含む) 用で、もう 1 つはページネーション ヘルパーでレンダリング@bookmarksします。
  2. でマークされたページネーション リンクremote: true
  3. 2 つのパーシャルを再レンダリングする 1 つの js ビュー。

    $('#notes_container').html('<%= j(render partial: 'paginated_notes_list') %>');
    $('#bookmarks_container').html('<%= j(render partial: 'paginated_bookmarks_list'); %>');
    
  4. これが重要です: 他のモデルの現在のページをパラメーターとして受け取るページネーション リンク。このようにして、他のモデルのどのページにいるかを「失う」ことはありません。

    <%= paginate @notes, param_name: 'page_1', params: {page_2: params[:page_2]} %>
    <%= paginate @bookmarks, param_name: 'page_2', params: {page_1: params[:page_1]} %>
    

繰り返しになりますが、質問者のシステムがどのように機能するかについてはよくわかりませんが、このソリューションにより、ユーザーは AJAX または html を介して他のモデルでの「場所」を失うことなく、両方のモデルをページングできます。

于 2013-07-18T16:45:29.697 に答える