Ruby变量作用域:从现有Ruby类内部访问rack.env



我有一个简单的类:

class Repository
  class << self
    def find(id)
      ...
    end
  end
end

它在我们的整个应用程序中都是这样称呼的:

 thing = Repository.find("abc")

我们处于Sinatra/rack环境中。在请求阶段,我们这样做:

  env['org'] = 'acme'

我想做的是能够从类Repository内部访问'acme',而不必显式地传入它。对这个类的调用太多了,每次通过find方法(例如find(id,org = nil))传入值都会很痛苦。我想也许有一种方法可以将机架宝石包含在Repository中,并以这种方式实现,但到目前为止还没有运气。全局变量是out-必须以请求为范围。

有可能做这样的事吗?

就我个人而言,我认为在类方法中有一个这样变化的变量是在找麻烦,它通过跨越边界来打破德米特定律。相反,我会将其封装在Sinatra助手中,然后默认情况下传递第二个参数。

helpers do
  def find( s )
    Repository.find( s, env['org'] )
  end
end

并修改CCD_ 4的CCD_。

相关内容

  • 没有找到相关文章

最新更新