kaminari未定义方法'page'

问题描述 投票:5回答:3

我正试图将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>

我不知道为什么会出现这种情况 因为我一步一步地按照文档的要求去做了

ruby-on-rails ruby kaminari
3个回答
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])


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

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.