Ruby变量作用域:是否从现有Ruby类内部访问rack.env?
我有一个简单的课程:Ruby变量作用域:是否从现有Ruby类内部访问rack.env?,ruby,sinatra,scope,rack,env,Ruby,Sinatra,Scope,Rack,Env,我有一个简单的课程: class Repository class << self def find(id) ... end end end 我们处于Sinatra/rack环境中。在请求阶段,我们执行以下操作: env['org'] = 'acme' 我想做的是能够从类存储库中访问'acme',而不必显式地将其传入。到处都有很多对这个类的调用,因此每次通过find方法(例如,find(id,org=nil))传入值都会很痛苦。我想也许有一
class Repository
class << self
def find(id)
...
end
end
end
我们处于Sinatra/rack环境中。在请求阶段,我们执行以下操作:
env['org'] = 'acme'
我想做的是能够从类存储库
中访问'acme'
,而不必显式地将其传入。到处都有很多对这个类的调用,因此每次通过find方法(例如,find(id,org=nil)
)传入值都会很痛苦。我想也许有一种方法可以将rack gem包含在存储库中,并以这种方式进行处理,但到目前为止运气不佳。全局变量不可用-必须限定到请求的范围
有可能这样做吗?就个人而言,我认为在类方法中有一个这样变化的变量是自找麻烦的,它通过跨越边界来打破规则。相反,我将它包装在一个Sinatra助手中,然后默认情况下,该助手将传递第二个参数
helpers do
def find( s )
Repository.find( s, env['org'] )
end
end
然后修改
存储库
的查找
方法,以获取第二个参数。是的,我几乎就是这样做的。这是一个很大的重构,但我同意,我试图做的是作为一个捷径有一个完全混乱。
helpers do
def find( s )
Repository.find( s, env['org'] )
end
end