我正在使用带有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'
答案 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"))%>")