【问题标题】:How to use Kaminari pagination gem with Sinatra and Mongoid?如何将 Kaminari 分页 gem 与 Sinatra 和 Mongoid 一起使用?
【发布时间】:2016-09-21 18:39:02
【问题描述】:

大概不需要太多的配置 - docs。宝石似乎不起作用。相关代码:

宝石文件:

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 - Affiliate:Class 的未定义方法“页面”

【问题讨论】:

  • 对于初学者,您链接到的文档说要将 Kaminari 与 Sinatra 一起使用,您需要 require "kaminari/sinatra"

标签: ruby pagination sinatra kaminari


【解决方案1】:

以下内容对我有用:

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'

【讨论】:

    【解决方案2】:

    错误消息指出您无法分页上课。此外,在分页数据集上调用 count 也不是正确的用法。相反,首先向类添加一些选择标准,然后尝试对结果进行分页。关于 Mongoid,一个例子是:

    @paginated_users = User.where(:age.gte => 10).page(10)
    

    默认情况下,kaminari 每页返回 25 个项目,您可以通过像这样附加 per(desired number of items per page) 方法来更改它,

    @paginated_users = User.where(:age.gte => 10).page(10).per(5)   
    

    最后,确保在相应的视图文件中添加<%= paginate @paginated_users %>(在 web.rb 中声明的相同变量名,其中包含要在视图中分页的数据集)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 2014-02-13
      • 2011-07-06
      相关资源
      最近更新 更多