我正试图将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>
我不知道为什么会出现这种情况 因为我一步一步地按照文档的要求去做了
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])
我建议你稍微重写一下你的控制器。最好是把你的过滤器移到模型或过滤器类中。看看 present?
以检验是否存在 params
因为那会检查 nil
和 empty
.
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
Tl;DR 如果你使用Mongoid,请使用kaminari-mongoid而不是kaminari单独使用。
在Github上说,Kaminari支持Mongoid......所以我去安装了gem'kaminari',结果是:未知方法:page......后来我找到了mongoid适配器:kaminari-mongoid,现在可以用了。