2015-02-06 85 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 

以我認爲,這種方法是合理的;我在其他應用程序中看到過它,它運行良好。

希望有所幫助。祝你好運!

相關問題