我正在開發一個Rails應用程序,我想使用ActiveResource將請求發送到REST服務器。服務器的實際URL網站是:在ActiveResource上通過站點URL傳遞語言環境參數
http://foo.com/api-v1.0
的一點是,對於服務器的每一次溝通我想通過當前區域在Rails應用程序上下文。因此,有效的URL電話是:
e.t.c.
所以,我下面窮人的ActiveResource文檔和我定義我的資源類,如下所示:
class MyClass < ActiveResource::Base
self.site = "http://foo.com/api-v1.0/:locale
end
然後我的應用程序控制器上,我有這樣的事情,例如讓所有的人時:
MyClass.all(:params => {:locale => I18n.locale})
其工作正常。
問題是控制器代碼變得非常冗長。我反覆必須在我訪問的每個資源上都通過:params => {:locale => I18n.locale}
。
爲了避免這種情況,我決定從的ActiveResource :: Base的派生的基類,並覆蓋以這樣的方式,所有資源存取方法,這樣我可以設置:語言環境。因此,代碼變爲:
class MyBaseClass < ActiveResource::Base
self.site = "http://foo.com/api-v1.0/:locale"
def self.all
super(:params => {:locale => I18n.locale})
end
end
class MyClass < MyBaseClass
end
,並在我的應用程序控制器:
MyClass.all
就足夠了。
然而,這使很多冗長和複雜的MyBaseClass
的。我必須重寫ActiveResource::Base
的所有方法來通過這個:locale
。
任何線索我怎麼能更有效地做到這一點?
在此先感謝
Panayotis
感謝您的錯字校正。不可以。您的解決方案無法正常工作,因爲它只設置一次網站。 '''self.site =「...'''每次請求被髮送到遠程資源(REST)服務器時都不會被調用 – 2012-04-30 06:21:48
啊,我明白了 - 當然,我建議只設置一次。已經糾正了我的上述帖子。 – tiredpixel 2012-05-01 00:30:13