'will_paginate undefined method'在视图中但不是控制器 - Sinatra 2.0,ActiveRecord 5.0

时间:2017-05-10 13:08:17

标签: sinatra will-paginate sinatra-activerecord

我添加了gem installation中概述的will_paginate gem 对于Sinatra。我从来没有在控制器内部得到“无方法错误”,但在路由视图中,我一直得到一个'no method for will_paginate#'。与Rails(link1link2)相关的答案并没有解决这个问题。这个mongoid相关的问题很接近。

以下是所用代码的概述:

  

在控制器应用中:

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
  

在erb索引视图中:

<%= will_paginate @posts %>
  

在Gemfile中:

gem 'will_paginate', '~> 3.1.0'

就像我说的那样,它只会在视图中打破,而不会在控制器中打破,这使我相信它是Sinatra特定的案例。

1 个答案:

答案 0 :(得分:2)

我的解决方案是:

  

在控制器应用

class Post < Sinatra::Base

  configure do
    register WillPaginate::Sinatra
  end

end

这绝对是一个Sinatra :: Helper问题,因为这个mongoid具体的答案也有效。选择你的毒药。

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