Я пытаюсь создать фильтр AJAX вместе с функцией разбиения на страницы AJAX.
Изначально, как вы видите, я разбил на страницы все "сообщения" всех пользователей. Нумерация страниц прекрасно работает здесь. Но затем, когда я выбираю в раскрывающемся меню пользователя, чтобы на странице отображались только все сообщения этого конкретного пользователя, нумерация страниц загадочным образом отключается (на рисунке показано, что я выбрал пользователя "neilmarion").
Я следовал этому руководству по 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 для фильтрации сообщений.
У меня нет идеи, почему нумерация страниц больше не работает сразу после выбора из выпадающего меню.