我在外部文件中定义了路由和助手,并由 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!
,所有这些都会引发错误这些也是
你知道我如何从我的路线访问助手吗?还是我设置不正确?
最佳答案
看来你混淆了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
关于ruby - 如何在包含的模块中使用我的 Sinatra 助手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22357563/