如何在包含的模块中使用我的Sinatra助手?

时间:2014-03-12 16:16:06

标签: ruby sinatra

我在外部文件中定义了我的路由和帮助程序,并由Sinatra包含,但我是Ruby的新手,我现在无法弄清楚如何在我的路由中使用我的帮助方法。当我在RubyMine中运行代码并访问配置文件URL时,我得到错误" NoMethodError - 未定义的方法`protected!'"

## Main class
require 'sinatra/base'
class MyApp < Sinatra::Base
    register Sinatra::MyHelpers
    register ProfileRoutes
    ...
end


## Helpers include
require 'sinatra/base'
module Sinatra
  module LocutusHelpers
    def self.registered( app )

      app.before do
        ...
      end

      def protected!
        ...
      end

    end
  end
end


## Routes include
require 'sinatra/base'
module ProfileRoutes
  def self.registered( app )

    app.get '/profile/:userid' do
      protected!
      ...
    end

  end
end

我已经尝试了def self.protected!帮助程序但是它无法访问请求对象。 我还试过了Sinatra::MyHelpers.protected!Sinatra.protected!app.protected!,也为所有这些错误提出了错误

您知道我如何从我的路线访问帮助者吗?或者我错误地设置了什么?

1 个答案:

答案 0 :(得分:2)

您似乎正在混淆adding helpers from extensions并从扩展程序配置您的应用。

您需要将protected!移动到模块中,然后在注册扩展时将该模块添加为帮助模块。

module LocutusHelpers
  # new module, move protected! into here
  module HelperMethods
    def protected!
      ...
    end
  end

  def self.registered( app )

    # add new hlpers module
    app.helpers HelperMethods

    # other extension setup as before...
    app.before do
      ...
    end

  end
end