我在外部文件中定义了我的路由和帮助程序,并由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!
,也为所有这些错误提出了错误
您知道我如何从我的路线访问帮助者吗?或者我错误地设置了什么?
答案 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