现在我正在尝试使用kaminari设置像twitter这样的ajax分页。
我收到了错误消息,我不知道如何解决这个问题。 我该怎么做才能让它发挥作用?
☆错误信息
NoMethodError at /members
undefined method `last_page?' for nil:NilClass
☆member.rb
default_scope :order => 'created_at DESC'
paginates_per 10
☆members_controller
def index
if params[:name].present?
@members = Member.where("name like ?" , "%" + params[:name] + "%")
@members = @members.order('created_at DESC').page(params[:page])
else
@members = Member.order('created_at DESC').page(params[:page])
end
end
☆index.html.erb
<h1>Listing users</h1>
<p>※登録されているユーザーのリストです。</p>
<div class= "form_index">
<%= form_tag({:action=>"index"}, {:method=>"get"}) do %>
<div class="from_field_index">
<%= text_field_tag 'name' %>
<%= submit_tag '名前検索' %>
<% end %>
</div>
</div>
<div id="lists">
<%= render 'index' %>
</div>
<%= link_to_next_page(@hoges, 'more', remote: true, id: 'view_more') %>
☆_index.html.erb
<table class="table">
<tr>
<th>写真</th>
<th>名前</th>
<th>分野</th>
<th>場所</th>
<th>経験</th>
<th>Follow</th>
<%# if Member.find(session[:user_id]).admin %>
<%# end %>
</tr>
<% @members.each do |member| %>
<tr>
<td>
<% if member.provider %>
<%=image_tag member.image ,:size=>'30x30'%>
<% elsif member.avatar_file_name %>
<%= image_tag member.avatar.url(:thumb), :width =>'30px', :height =>'30px' %>
<% else %>
<%= image_tag "love.png", :size=>'30x30' %>
<% end %>
</td>
<td>
<a href="/members/<%= member.id %>"><%= member.name %></a>
<% if member.provider == "facebook" %>
<a target="_blank" href="http://www.facebook.com/<%=member.uid %>"> <%=image_tag "fb.png" ,:size=>'20x20'%> </a>
<% elsif member.provider == "twitter" %>
<a target="_blank" href="http://www.twitter.com/<%=member.name %>"> <%=image_tag "twitter.png" ,:size=>'20x20'%> </a>
<% end %>
</td>
<td><%= member.field %></td>
<td>
<% if member.url.present? %>
<%=link_to member.place ,member.url ,:target=>["_blank"] %>
<% else %>
<%= member.place %>
<% end %>
</td>
<td><%= member.experience %></td>
<td>
<div class="onoff">
<% unless session[:user_id] == member.id %>
<% if @Frids.include? member.id%>
<%= link_to'解除', {:controller => 'members', :action => 'index', :id =>
member.id}, class: "btn btn-midium btn-warning"%><br/>
<% else %>
<%= link_to'follow', {:controller => 'members', :action => 'index', :id =>
member.id}, class: "btn btn-midium btn-primary"%><br/>
<% end %>
<% end %>
</div>
<%#= member.friends.count %>
</td>
<% if Member.find(session[:user_id]).admin %>
<td><%= link_to 'Destroy', member, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<% end %>
</tr>
<% end %>
</table>
☆index.js.erb的
$("#view_more").replaceWith("<%= escape_javascript(
link_to_next_page(@members, 'more', remote: true, id: 'view_more')
) %>");
☆members_helper.rb
module MembersHelper
def link_to_next_page(scope, name, options = {}, &block)
param_name = options.delete(:param_name) || Kaminari.config.param_name
link_to_unless scope.last_page?, name, {param_name => (scope.current_page + 1)}, options.merge(:rel => 'next') do
block.call if block
end
end
end
答案 0 :(得分:0)
该错误告诉您在“MembersHelper”模块中,您调用last_page?
对象上的nil
方法:参数scope
的值。由于scope
是link_to_next_page
方法的必需参数,因此表示您使用第一个参数等于nil
来调用此方法。
因此,您的控制器为@members分配了一个零值。
尝试用这个替换你的索引方法,并查看你的日志中的值,你会发现错误是否来自params的错误值!
def index
if params[:name].present?
@members = Member.where("name like ?" , "%" + params[:name] + "%")
@members = @members.order('created_at DESC').page(params[:page])
else
@members = Member.order('created_at DESC').page(params[:page])
end
p params[:page]
p params[:name]
p @members
end