我正在编写一个rails应用程序,它使用buntine的discogs api ruby包装器,我的大多数对象都需要访问控制器中存在的@discogs对象,并代表整个ruby包装器和与discogs的连接。而不是将@discogs传递给其他对象,而其他对象当然需要@discogs传递给他们的其他对象,我应该在某种程度上将@discogs作为我的应用程序中的全局变量吗?
我觉得我写错了代码传递这个对象,但我对于全球范围的解决方案也犹豫不决,我甚至不确定合理的方法是什么在轨道上。
建议非常感谢!
答案 0 :(得分:1)
您可以在初始化程序中创建一个全局对象,而不是在应用程序周围传递@discogs
变量:
<强>配置/初始化/ discogs.rb 强>
DiscogsWrapper = Discogs::Wrapper.new("My awesome web app")
现在,您可以参考应用程序其他部分中的DiscogsWrapper
对象。
示例1:
module Artists
def self.search(name, wrapper = DiscogsWrapper)
wrapper.search(name)
end
end
示例2:
class Artist
def get
wrapper.get_artist(discogs_id)
end
private
def wrapper
DiscogsWrapper
end
end
在我看来,这种方法是合理的;我在其他应用程序中看到它并且效果很好。
希望有所帮助。祝你好运!