2014-04-29 35 views
0

我一直在尝试正确设置分页,但遇到任何教程并使其正常工作时遇到问题。使用will_paginate正确设置分页

我基本上想要设置的是,当用户选择他们想要出现在页面上的公司数量时,以下循环分页给出了每个页面上给定数量的公司。如果用户没有选择特定数量的公司/页面,则会设置默认值。

如果任何人都可以给我一个正确的方向推动,那将非常感激。

查看

<ul class="list-group"> 
<%= @comps.find_each do |comp| %> 
<li class="list-group-item"> 
<div class="row"> 
    <div class="span12"> 
     <p style="font-size: 1.5em"><strong><%= link_to comp.name, comp %></strong></p> 
     <hr class="divider"> 
     <div class="row"> 
      <div class="span6"> 
       <p><strong>Primary Field:</strong> <%= comp.primary_field %></p> 
       <p><strong>Description:</strong> <%= truncate(comp.description, length: 150) { link_to "Read More", comp, :target => "_blank"}%> 
       </p> 
      </div> 
      <div class="span5"> 
       <% if signed_in? %> 
        <p><% if !(current_user.favorites.include? comp) %> 
          <%= link_to 'Favorite', 
          favorite_company_path(comp, type: "favorite"), 
          class: "btn btn-primary", 
          method: :put%> 

        <% else %> 
          <%= link_to 'Unfavorite', 
          favorite_company_path(comp, type: "unfavorite"), 
          class: "btn btn-danger", 
          method: :put%> 
        <% end %></p> 
       <% end %> 
       <p><strong>Website:</strong> <%= auto_link(comp.website, :html => { :target => '_blank' })%></p> 
       <p><strong>Location:</strong> <%= comp.address %></p> 
      </div> 
     </div> 
    </div> 
</div> 
</li> 
<% end %> 
<%= will_paginate @comps%> 
</ul> 

控制器(其中列表页面处理)的列表页

class DynamicPages < ActiveRecord::Base 

    self.per_page = 5 

end 
+0

如果您在控制器中使用此代码 '@comps = Comps.paginate(:page => params [:page],:per_page => params [:count])' 然后,在视图中使用'<%= will_paginate @comps%>' 并且在模型中设置'self.per_page = 10'来设置'params [:count]'没有被选中 – robzdc

+0

我真的很接近解决这个问题,但还有一个问题。请参阅以下答案的评论。我还更新了一些代码。 – Scalahansolo

回答

0

def filter 
    if ((params[:field] != "") and (params[:field] != "All Fields") and (params[:field] != nil)) 
     # This will apply the filter 
     @comps = Company.where(primary_field: params[:field]) 
    else 
     # This will return all records 
     @comps = Company.all 
    end 
    end 

    def list 
    @fields = @@primary_field 
    filter 
    @comps = @comps.paginate(:page => params[:page], :per_page => params[:number_of_companies] ||= 5) 
    end 

模式

由于您正在使用will_paginate。你可以这样做。

Post.paginate(:page => params[:page], :per_page => params[:number_of_companies] ||= 10) 

这里PARAMS [:number_of_companies]是一个用户已经选择公司的数量和10是

默认页面值。

类岗位

self.per_page = 10 

而且,您的代码段<%= @ comps.find_each做|补偿| %>,应该是这个<%%>而不是<%=%>

+0

我觉得我真的很接近这个工作。目前,我根据我拥有的公司数量获得了正确的页数,但是我仍然有一个问题,即我的所有公司都出现在第一页上。我该如何设置这一点,以便我的循环在每个页面上放置正确数量的公司? – Scalahansolo

+0

您是否改变了<%= @ comps.find_each do | comp | %>'到'<%@ comps.find_each do | comp | %>'已经? – robzdc