0

我有一个简单的课程:

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

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

 thing = Repository.find("abc")

我们处于 Sinatra/机架环境中。在请求阶段,我们执行以下操作:

  env['org'] = 'acme'

我想做的是能够'acme'从类内部访问Repository,而不必显式传递它。到处都有对这个类的调用,以至于传递值会很痛苦每次通过 find 方法,例如find(id,org = nil)。我想也许有一种方法可以将 rack gem 包含在 Repository 中,并以这种方式进行操作,但到目前为止还没有运气。全局变量已失效 - 必须限定在请求范围内。

有可能做这样的事情吗?

4

1 回答 1

0

就个人而言,我认为在类方法中拥有一个像这样变化的变量是在自找麻烦,它通过跨越边界打破了得墨忒耳法则。相反,我将它包装在一个 Sinatra 助手中,然后默认传递第二个参数。

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

并修改Repository'find方法以采用第二个参数。

于 2013-07-06T20:31:34.060 回答