Ruby on rails 在这个rails应用程序中需要全局变量还是更好的OO设计?
我正在编写一个rails应用程序,它使用buntine提供的discogs api ruby wrapper,我的大多数对象都需要访问控制器中的@discogs对象,该对象表示整个ruby wrapper和到discogs的连接。我应该在某种程度上使@discogs成为我的应用程序中的全局变量,而不是将@discogs传递给其他对象,这些对象反过来又与其他对象一起工作,而这些对象当然需要将@discogs传递给它们 我觉得我在编写糟糕的代码来传递这个对象,但我也对全局范围解决方案犹豫不决,我甚至不确定在rails中实现这一点的合理方法是什么Ruby on rails 在这个rails应用程序中需要全局变量还是更好的OO设计?,ruby-on-rails,ruby,variables,global,Ruby On Rails,Ruby,Variables,Global,我正在编写一个rails应用程序,它使用buntine提供的discogs api ruby wrapper,我的大多数对象都需要访问控制器中的@discogs对象,该对象表示整个ruby wrapper和到discogs的连接。我应该在某种程度上使@discogs成为我的应用程序中的全局变量,而不是将@discogs传递给其他对象,这些对象反过来又与其他对象一起工作,而这些对象当然需要将@discogs传递给它们 我觉得我在编写糟糕的代码来传递这个对象,但我也对全局范围解决方案犹豫不决,我甚至
非常感谢您的建议 您可以在初始值设定项中创建全局对象,而不是在应用程序周围传递
@discogs
变量,如下所示:
config/initializers/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
class Artist
def get
wrapper.get_artist(discogs_id)
end
private
def wrapper
DiscogsWrapper
end
end
示例2:
module Artists
def self.search(name, wrapper = DiscogsWrapper)
wrapper.search(name)
end
end
class Artist
def get
wrapper.get_artist(discogs_id)
end
private
def wrapper
DiscogsWrapper
end
end
在我看来,这种做法是合理的;我在其他应用程序中也看到过,它工作得很好
希望有帮助。祝你好运 我也不知道标准和正确的答案,但如果您将其作为一种方法,就像我们对
当前用户所做的那样,或者作为应用程序控制器中的一种正常方法,该怎么办?所有控制器都将具有访问权限。