';将分页未定义的方法';在视图中但不在控制器中-Sinatra 2.0、ActiveRecord 5.0

';将分页未定义的方法';在视图中但不在控制器中-Sinatra 2.0、ActiveRecord 5.0,sinatra,will-paginate,sinatra-activerecord,Sinatra,Will Paginate,Sinatra Activerecord,我添加了will_paginate gem,如gem中所述 为了西纳特拉。我从未在控制器内部得到“no method error”,但在routed视图中,我一直得到“no method for will_paginate#”。与Rails(,)相关的答案无法解决此问题。这个相关的问题很接近 下面是所用代码的概要: 控制器应用程序中: 正如我所说,它只会打断视图,而不会打断控制器,这让我相信这是Sinatra特有的案例。我的解决方案是: 控制器内应用程序 class Post

我添加了will_paginate gem,如gem中所述 为了西纳特拉。我从未在控制器内部得到“no method error”,但在routed视图中,我一直得到“no method for will_paginate#”。与Rails(,)相关的答案无法解决此问题。这个相关的问题很接近

下面是所用代码的概要:

控制器应用程序中:

正如我所说,它只会打断视图,而不会打断控制器,这让我相信这是Sinatra特有的案例。

我的解决方案是:

控制器内应用程序

class Post
这肯定是一个Sinatra::Helper问题,因为这个特定的答案也适用。选择你的毒药


我在这里的理解是,WillPaginate模块将自己直接注入Sinatra的Helpers模块(猴子补丁)。在某些环境中,如我的环境中,您必须通过注册将其扩展到Sinatra。希望这能节省一些时间。

非常有帮助,您发布了这篇文章,谢谢!在Sinatra中将一些路由拆分为单独的控制器类时遇到了同样的愚蠢问题。
require 'will_paginate'
require 'will_paginate/active_record'

class SinatraApp < Sinatra::Base

  get '/post' do
    @post = Post.all.paginate(:page => params[:page], :per_page => 30)
    erb :index
  end

end
<%= will_paginate @posts %>
gem 'will_paginate', '~> 3.1.0'
class Post < Sinatra::Base

  configure do
    register WillPaginate::Sinatra
  end

end