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