kaminari undefined method'page'

时间:2014-01-30 18:11:50

标签: ruby-on-rails ruby kaminari

我正在尝试将Kaminari添加到我的Rails应用中。我已经包含了gem,这就是我的控制器的样子:

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>

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

3 个答案:

答案 0 :(得分:19)

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])

答案 1 :(得分: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

答案 2 :(得分:0)

Tl; DR如果您使用Mongoid,请使用kaminari-mongoid而不是单独使用kaminari。

在Github上说,Kaminari支持Mongoid ...所以我去安装了gem'kaminari',结果是:未知方法:page ...后来我找到了mongoid适配器:kaminari-mongoid,现在可以使用了。 / p>