如何在 Sinatra 和 Mongoid 中使用 Kaminari 分页 gem?
How to use Kaminari pagination gem with Sinatra and Mongoid?
据推测,不需要很多配置 - docs。 gem 似乎不起作用。相关代码:
宝石文件:
source 'https://rubygems.org'
ruby '2.2.4'
gem 'sinatra'
gem 'thin'
gem 'slim'
gem 'json'
gem 'mongoid'
gem 'kaminari'
web.rb:
require 'sinatra'
require 'json'
require 'mongoid'
require 'kaminari'
# Mongoid class
class Affiliate
include Mongoid::Document
field :name, type: String
end
# MongoDB connection info and whatnot
Mongoid.load!('mongoid.yml', :development)
get '/kaminari' do
puts Affiliate.page(1).count
end
错误:
NoMethodError - undefined method `page' for Affiliate:Class
错误消息指出您无法寻呼 class。此外,在分页数据集上调用 count
不是正确的用法。相反,首先向 class 添加一些选择标准,然后尝试对结果进行分页。关于 Mongoid,一个例子是:
@paginated_users = User.where(:age.gte => 10).page(10)
默认情况下,kaminari returns 每页 25 个项目,您可以通过附加 per(desired number of items per page)
方法来更改它,
@paginated_users = User.where(:age.gte => 10).page(10).per(5)
最后,确保在相应的视图文件中添加 <%= paginate @paginated_users %>
(在 web.rb 中声明的相同变量名称,其中包含要在视图中分页的数据集)。
以下对我有用:
require 'mongoid'
require 'kaminari/sinatra'
require 'kaminari/mongoid'
get '/rest/1.0/post' do
# matches "GET /rest/1.0/post?page=1"
page_id = params[:page].to_i
redirect '/rest/1.0/post?page=1' if page_id == 0
page = Post.page(page_id)
json(size: Post.count,
total_pages: page.total_pages,
per_page: page.limit_value,
prev_page: page.prev_page,
current_page: page_id,
next_page: page.next_page,
data: page)
end
在 Gemfile 中:
gem 'mongoid'
gem 'kaminari-mongoid'
gem 'kaminari-sinatra'
据推测,不需要很多配置 - docs。 gem 似乎不起作用。相关代码:
宝石文件:
source 'https://rubygems.org'
ruby '2.2.4'
gem 'sinatra'
gem 'thin'
gem 'slim'
gem 'json'
gem 'mongoid'
gem 'kaminari'
web.rb:
require 'sinatra'
require 'json'
require 'mongoid'
require 'kaminari'
# Mongoid class
class Affiliate
include Mongoid::Document
field :name, type: String
end
# MongoDB connection info and whatnot
Mongoid.load!('mongoid.yml', :development)
get '/kaminari' do
puts Affiliate.page(1).count
end
错误:
NoMethodError - undefined method `page' for Affiliate:Class
错误消息指出您无法寻呼 class。此外,在分页数据集上调用 count
不是正确的用法。相反,首先向 class 添加一些选择标准,然后尝试对结果进行分页。关于 Mongoid,一个例子是:
@paginated_users = User.where(:age.gte => 10).page(10)
默认情况下,kaminari returns 每页 25 个项目,您可以通过附加 per(desired number of items per page)
方法来更改它,
@paginated_users = User.where(:age.gte => 10).page(10).per(5)
最后,确保在相应的视图文件中添加 <%= paginate @paginated_users %>
(在 web.rb 中声明的相同变量名称,其中包含要在视图中分页的数据集)。
以下对我有用:
require 'mongoid'
require 'kaminari/sinatra'
require 'kaminari/mongoid'
get '/rest/1.0/post' do
# matches "GET /rest/1.0/post?page=1"
page_id = params[:page].to_i
redirect '/rest/1.0/post?page=1' if page_id == 0
page = Post.page(page_id)
json(size: Post.count,
total_pages: page.total_pages,
per_page: page.limit_value,
prev_page: page.prev_page,
current_page: page_id,
next_page: page.next_page,
data: page)
end
在 Gemfile 中:
gem 'mongoid'
gem 'kaminari-mongoid'
gem 'kaminari-sinatra'