在Ajax调用后,分页(will_paginate)不起作用

时间:2011-06-06 04:34:13

标签: ruby-on-rails ajax filter pagination will-paginate

我正在尝试创建一个AJAX过滤器以及一个AJAX分页功能。

Initially

最初,正如您所看到的,我对所有用户的所有“帖子”进行了分页。分页在这里完美运作。但是当我从下拉菜单中选择一个用户,以便页面只显示该特定用户的所有帖子时,分页神秘地禁用(插图显示我选择了用户“neilmarion”)。

After selecting from the drop-down menu, pagination disables

我按照this教程对AJAXify我的分页功能进行了操作,效果很好。

以下是页面的视图代码(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

从上面的图片中可以看出,只要有一个ajax调用来过滤帖子,分页链接的网址就会改变。

我从下拉菜单中选择后,我真的不知道为什么分页不再起作用。

1 个答案:

答案 0 :(得分:1)

跟随ryan bates关于分页的文章 http://railscasts.com/episodes/174-pagination-with-ajax 可能这应该可以帮到你