Chr*_*ton 26 mongoid ruby-on-rails-3 kaminari
我无法超越这个.我知道我已经读过没有数组的页面方法,但我该怎么办?
如果我在控制台中运行Class.all,则返回#,但如果我运行Class.all.page(1),则会出现上述错误.
有任何想法吗?
Jam*_*hen 38
No Array没有页面方法.
看起来你正在使用kaminari.Class.all返回一个数组,因此你无法在其上调用页面.而是直接使用Class.page(1).
对于普通数组,kaminari有一个很好的帮助方法:
Kaminari.paginate_array([1, 2, 3]).page(2).per(1)
Run Code Online (Sandbox Code Playgroud)
Dav*_*ens 11
Kaminari现在有一个分层数组的方法,所以你可以在你的控制器中做这样的事情:
myarray = Class.all
@results = Kaminari.paginate_array(myarray).page(params[:page])
Run Code Online (Sandbox Code Playgroud)
当您获得 Array 的未定义方法页面时,可能您正在使用kaminari gem 并且您正试图在控制器操作中对您的模型进行分页。
NoMethodError at /
undefined method `page' for # Array
Run Code Online (Sandbox Code Playgroud)
在那里您需要提醒自己两件事,您愿意分页的集合可以是Array或ActiveRecordRelation或者当然是其他东西。
要查看差异,假设我们的模型是 Product 并且我们在products_controller.rb上的索引操作中。我们可以使用以下内容之一构建我们的@products:
@products = Product.all
Run Code Online (Sandbox Code Playgroud)
或者
@products = Product.where(title: 'title')
Run Code Online (Sandbox Code Playgroud)
或者别的什么……等等
无论哪种方式,我们都会获得您的@products,但是课程是不同的。
@products = Product.all
@products.class
=> Array
Run Code Online (Sandbox Code Playgroud)
和
@products = Product.where(title: 'title')
@products.class
=> Product::ActiveRecordRelation
Run Code Online (Sandbox Code Playgroud)
因此,根据集合的类别,我们愿意对 Kaminari 提供的内容进行分页:
@products = Product.where(title: 'title').page(page).per(per)
@products = Kaminari.paginate_array(Product.all).page(page).per(per)
Run Code Online (Sandbox Code Playgroud)
总结一下,一个向模型添加分页的好方法:
def index
page = params[:page] || 1
per = params[:per] || Product::PAGINATION_OPTIONS.first
@products = Product.paginate_array(Product.all).page(page).per(per)
respond_to do |format|
format.html
end
end
Run Code Online (Sandbox Code Playgroud)
在你想要分页的模型中(product.rb):
paginates_per 5
# Constants
PAGINATION_OPTIONS = [5, 10, 15, 20]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13884 次 |
| 最近记录: |