我正在尝试将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>
不确定为什么会出现这种情况,因为我按照文档步骤进行操作。
答案 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
,因为它会检查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
答案 2 :(得分:0)
Tl; DR如果您使用Mongoid,请使用kaminari-mongoid而不是单独使用kaminari。
在Github上说,Kaminari支持Mongoid ...所以我去安装了gem'kaminari',结果是:未知方法:page ...后来我找到了mongoid适配器:kaminari-mongoid,现在可以使用了。 / p>