Rails 애플리케이션을 개발 중이며 ActiveResource를 사용하여 REST 서버에 요청을 보내려고합니다. 서버의 실제 URL 사이트입니다 :ActiveResource의 사이트 URL을 통한 로케일 매개 변수 전달
http://foo.com/api-v1.0
요점은 서버에 모든 통신을 위해 내가 레일 응용 프로그램 컨텍스트에서 현재의 지역을 통과 할 것입니다. 그래서 유효한 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
에 많은 자세한 정보와 복잡성을 부여합니다. 이 :locale
을 전달하려면 ActiveResource::Base
의 모든 메서드를 재정의해야합니다.
어떻게하면 더 효율적으로 할 수 있을까요? 사전
Panayotis
감사 오타에 대한 보정. 솔루션은 사이트를 한 번 설정하기 때문에 작동하지 않습니다. '''self.site = "...'''는 요청이 원격 자원 (REST) 서버로 전송 될 때마다 호출되지 않습니다. –
아, 물론 알았습니다. 위의 게시물을 수정했습니다. – tiredpixel