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から派生した基本クラスを用意して、そのような方法ですべてのリソースアクセスメソッドをオーバーライドして、:localeを設定できるようにしました。だから、コードは次のようになります。
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
には多くの冗長と複雑さがあります。この:locale
を渡すには、ActiveResource::Base
のすべてのメソッドをオーバーライドする必要があります。
どうすればより効率的に行うことができますか?事前に
おかげ
Panayotis
感謝を。あなたの解決策は機能していません。サイトを一度設定するからです。 '' 'self.site =" ... '' 'はリクエストがリモートリソース(REST)サーバーに送られるたびに呼び出されません。 –
ああ、もちろん、私が示唆したものは一度しか設定されていません。上記の投稿を修正しました。 – tiredpixel