Разбиение на страницы (will_paginate) не работает после вызова Ajax - PullRequest
2 голосов
/ 06 июня 2011

Я пытаюсь создать фильтр AJAX вместе с функцией разбиения на страницы AJAX.

Initially

Изначально, как вы видите, я разбил на страницы все "сообщения" всех пользователей. Нумерация страниц прекрасно работает здесь. Но затем, когда я выбираю в раскрывающемся меню пользователя, чтобы на странице отображались только все сообщения этого конкретного пользователя, нумерация страниц загадочным образом отключается (на рисунке показано, что я выбрал пользователя "neilmarion").

After selecting from the drop-down menu, pagination disables

Я следовал этому руководству по AJA, уточнил мою функцию нумерации страниц, и она отлично работает.

Ниже приведен код просмотра страницы (index.html.erb):

<script src="javascripts/a.js" type="text/javascript"></script>
<%= javascript_include_tag 'prototype' %>
<%= javascript_include_tag 'lowpro' %>
<%= javascript_include_tag 'application' %>

<h1>AJAXIFIED PAGINATION TEST (will_paginate gem)</h1>

<%= collection_select(:person,
                      :id,
                      @people, :id, :name, 
                      {},
                      {:onChange => remote_function(:with => "'user_id='+value", :update => "search_results", :url =>{ :controller => :home, :action => :filter_posts_by_person } ) }) %>

<div id="search_results">
  <%= render :partial => "search_results" %>
</div>

Ниже приведен фрагмент, который обновляется всякий раз, когда пользователь выбирает из раскрывающегося меню (_search_results.html.erb)

<% width = 1000 %>
<% rheight = 50 %>
<% colsperrow = 2 %>
<% desuserperpage = 8.0 %>

<table border="0" width="<% width %>">
  <% e = @posts.count %>
  <% d = 0 %>
  <% while d < (desuserperpage / colsperrow).ceil %>
    <tr height="<%= rheight %>">
    <% c = 0 %>
    <% while c < colsperrow %>
      <% if (d*colsperrow)+c >= @posts.count %>
      <td width="<%= width/(2*colsperrow) %>">

      </td>
      <td width="<%= width/(2*colsperrow) %>">

      </td>
      <% else %>
      <td width="<%= width/(2*colsperrow) %>" align="right">
        <%= image_tag Person.find(@posts[(d*colsperrow)+c].person_id).avatar.url(:small) %>
      </td>
      <td width="<%= width/(2*colsperrow) %>" bgcolor="yellow">
        <font face="arial" size="2">
        <%= @posts[(d*colsperrow)+c].content %>
        </font>
      </td>
      <% end %>
      <% c+=1 %>
    <% end %>
    <% d+=1 %>
    </tr>
  <% end %>
</table>

<%= will_paginate @posts %>

Ниже представлен контроллер (home_controller.rb), отвечающий за разбиение на страницы и фильтрацию сообщений:

class HomeController < ApplicationController
  def index
    @posts = Post.paginate(:per_page => 8, :page => params[:page], :order => 'updated_at')
    @people = Person.find(:all)

    respond_to do |format|
      format.html # index.html.erb
      format.js do
        render :update do |page|
          page.replace_html 'search_results', :partial => "search_results"
        end
      end
    end
  end

  def filter_posts_by_person
    @posts = Post.paginate(:conditions => ["posts.person_id = ?", params[:user_id]], :per_page => 8, :page => params[:page], :order => 'updated_at')
    Rails.logger.debug params.inspect
    render :partial => "search_results"
  end
end

Как вы можете видеть на изображениях выше, URL ссылок нумерации страниц изменяется при каждом вызове ajax для фильтрации сообщений.

У меня нет идеи, почему нумерация страниц больше не работает сразу после выбора из выпадающего меню.

1 Ответ

1 голос
/ 13 июня 2011

следуйте статье Райана Бейтса о нумерации страниц http://railscasts.com/episodes/174-pagination-with-ajax может быть, это должно вам помочь

...