2014-01-30 45 views
4

我想添加Kaminari到我的Rails应用程序。我已经包括创业板,这是我的控制器是什么样子:kaminari undefined方法'页'

def index 
    if params[:year] 
     if params[:year].size > 0 
     @songs = Song.where("year like ?", params[:year]).page(params[:page]) 
     elsif params[:artist].size > 0 
     @songs = Song.where("artist_name like ?", params[:artist]).page(params[:page]) 
     elsif params[:song].size > 0 
     @songs = Song.where("title like ?", params[:song]).page(params[:page]) 
     end 
    else 
     @songs = Song.first(10).page(params[:page]) 
    end 
    end 

,然后加入

<%= paginate @songs %> 
在我看来

,我得到的错误是:

undefined method `page' for #<Array:0x007fab0455b4a8> 

不当然,为什么会出现这种情况,因为我按照文档步骤进行了操作。

回答

18

Kaminari使用paginate_array来分页数组。 2个解决方案:

首先,你可以使用limit(10)代替first(10)

@songs = Song.limit(10).page(params[:page])

二,使用paginate_array

@songs = Kaminari.paginate_array(Song.first(10)).page(params[:page])

+0

这种结构的方式关注我:paginate_array是否对已解析的查询操作? – allanberry

2

我建议你稍微重写你的控制器。更好的是,将你的过滤器移动到模型或过滤器类。看看present?测试是否存在params,因为这将检查nilempty

def index 
    @songs = Song 

    @songs = @songs.where("year like ?", params[:year])   if params[:year] 
    @songs = @songs.where("artist_name like ?", params[:artist]) if params[:artist] 
    @songs = @songs.where("title like ?", params[:song])   if params[:song] 

    @songs = @songs.limit(10).page(params[:page]) 
end