Ruby on rails 分页(will_paginate)在Ajax调用后不起作用

Ruby on rails 分页(will_paginate)在Ajax调用后不起作用,ruby-on-rails,ajax,filter,pagination,will-paginate,Ruby On Rails,Ajax,Filter,Pagination,Will Paginate,我正在尝试创建一个AJAX过滤器和一个AJAX分页功能 如您所见,最初,我对所有用户的所有帖子进行分页。分页在这里非常有效。但是当我从下拉菜单中选择一个用户时,页面只显示该用户的所有帖子,分页神秘地禁用了我选择用户neilmarion的图示 我按照教程对我的分页函数进行了AJAXify,它工作得非常好 以下是页面的视图代码index.html.erb: <script src="javascripts/a.js" type="text/javascript"></script&

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

如您所见,最初,我对所有用户的所有帖子进行分页。分页在这里非常有效。但是当我从下拉菜单中选择一个用户时,页面只显示该用户的所有帖子,分页神秘地禁用了我选择用户neilmarion的图示

我按照教程对我的分页函数进行了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调用来过滤帖子,分页链接的url就会改变


在我从下拉菜单中选择后,我真的不知道为什么分页不再有效。

请关注ryan bates关于分页的文章
也许这会对你有所帮助

Railscast这一集非常有效,但它只涉及分页。它没有进一步讨论如何在其他ajax调用中包含分页。例如,我想在一个AJAX过滤器调用后分页。@neilmarion:是的,这里也有同样的问题。。但我找到了一个黑客解决方案。。例如,在通过ajax调用删除帖子之后,我在帖子索引页面上使用了分页ajax。当我尝试分页时,“this.href”是“/posts/:id?page=2”而不是“/posts?page=2”,因此我将“$.getScriptthis.href”替换为“a=this.href.split?[1];$”。获取脚本/帖子?+a;'目前它正在发挥作用,但需要找到更好的解决方案。如果你找到了,请把答案贴出来!