2015-02-06 25 views
1

我正在写一个rails应用程序,它使用buntine的discogs api ruby​​包装器,而我的大多数对象都需要访问存在于控制器中的@discogs对象,并表示整个ruby包装器和连接到discogs。而不是将@discogs传递给其他对象,而其他对象又与其他对象一起工作,而这些对象当然需要@discogs传递给它们,我应该在某种程度上使@discogs成为我应用程序中的全局变量?在这个rails应用程序中,我需要一个全局变量还是更好的OO设计?

我觉得我正在编写错误的代码传递这一个对象,但我也犹豫了全球范围的解决方案,我甚至不知道什么合理的方式来做到这一点是在轨道上。

建议非常感谢!

+0

我也不知道标准和正确的答案,但如果你使它成为一个方法,就像我们用'current_user'或应用程序控制器中的常规方法做的那样?所有的控制器将有权访问。 – Deep 2015-02-06 04:00:01

回答

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 

以我认为,这种方法是合理的;我在其他应用程序中看到过它,它运行良好。

希望有所帮助。祝你好运!

相关问题