Ajax分页就像推特与kaminari一样



现在我正在尝试使用 kaminari 设置像 Twitter 一样的 ajax 分页。

我收到一条错误消息,我不知道如何解决这个问题。我应该怎么做才能让它工作?

☆错误信息

NoMethodError at /members
undefined method `last_page?' for nil:NilClass

☆会员.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

☆索引.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>

☆索引.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

错误告诉您在"MembersHelper"模块中,在nil对象上调用last_page?方法:参数的值scope 。由于scopelink_to_next_page方法的强制参数,这意味着您在调用此方法时,其第一个参数等于 nil

因此,控制器将 nil 值分配给@members。

尝试用这个替换你的索引方法,并在你的日志中查看值,你会发现错误是否来自参数的错误值!

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

最新更新