Ruby on Rails:分页AJAX不会渲染下一页

时间:2014-05-10 04:57:05

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

我正在使用带有Ruby on Rails的Will paginate gem(4.2)并呈现我正在使用Ajax的页面。我正在使用will paginate helper来做到这一点。并且正在正确地请求页面并接收响应但不呈现下一个HTML页面。 谁能告诉我它里面缺少什么?

使用:

<%= ajax_will_paginate @itmes, :params => { :my_excluded_param => nil } %>

制作分页链接。

这是我的分页助手:

module WillPaginateHelper

  class WillPaginateAjaxLinkRenderer < WillPaginate::ActionView::LinkRenderer

    def prepare(collection, options, template)

      options[:params] ||= {}

      options[:params]["_"] = nil

      super(collection, options, template)

    end

    protected

    def link(text, target, attributes = {})

      if target.is_a? Fixnum

        attributes[:rel] = rel_value(target)

        target = url(target)

      end

      ajax_call = "$.ajax({url: '#{target}', dataType: 'script'});"

      @template.link_to_function(text.to_s.html_safe, ajax_call, attributes)

    end

  end

  def ajax_will_paginate(collection, options = {})

    will_paginate(collection, options.merge(:renderer => WillPaginateHelper::WillPaginateAjaxLinkRenderer))

  end

end

我的控制器功能是:

  def index

    @items = Item.paginate(:per_page => 5, :page => params[:page])

  end

我添加了代码index.js.erb

现在终端日志是: 现在终端日志是:

Started GET "/items?page=2&_=1399700653418" for 127.0.0.1 at 2014-05-10 11:14:16 +0530
Processing by ItemsController#index as JS
  Parameters: {"page"=>"2", "_"=>"1399700653418"}
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 2 ORDER BY "users"."id" ASC LIMIT 1
  Rendered items/index.js.erb (12.7ms)
Completed 500 Internal Server Error in 20ms

ActionView::Template::Error (Missing partial items/items, application/items with {:locale=>[:en], :formats=>[:js, "application/ecmascript", "application/x-ecmascript", :html, :text, :css, :ics, :csv, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in:
  * "/var/www/selectcom/app/views"
  * "/home/randhir/.rvm/gems/ruby-2.1.0/gems/kaminari-0.15.1/app/views"
  * "/home/randhir/.rvm/gems/ruby-2.1.0/gems/devise-3.2.4/app/views"
):
    1: <%= "$('body').html('#{escape_javascript(render 'items')}');".html_safe %>
  app/views/items/index.js.erb:1:in `_app_views_items_index_js_erb__4572043876272285855_69867408217600'

1 个答案:

答案 0 :(得分:1)

您没有创建要在ajax请求上呈现的名为items的部分文件。请尝试以下。

应用程序/控制器/ items_controller.rb

def index
  @items = Item.paginate(:per_page => 5, :page => params[:page])
end

视图/项目/ index.html.erb

<div class = "sort_paginate_ajax"><%= render 'items' %></div>

视图/项目/ _items.html.erb

<% @items.each do |item| %>
# your code
 <%= item.name %>
<% end %>
<%= ajax_will_paginate @items %>

视图/项目/ index.js.erb的

$('.sort_paginate_ajax').html("<%= escape_javascript(render("items"))%>")