2011-11-11 2 views
1

when thinking about the user, password, and site variables in ActiveResource::Base을 실현하여 한 요청에서 수정할 수 있으며 다음 요청시 수정 된 상태로 유지됩니다. 이것은 클래스 변수/속성의 모든 사용에 적용되기 때문에 바람직하지 않은 동작 및 광범위한 문제로 보입니다.레일즈는 요청간에 클래스 변수를 재설정 할 수있는 방법이 있습니까?

레일은 클래스 수준 상태 변경을 정리 (예 : 기본값으로 재설정)하여 각 요청을 초기 상태로 시작하는 메커니즘을 제공합니까?

그렇지 않은 경우 각 요청의 시작 부분에 다시 적용될 클래스 변수를 초기화하는 방법을 추가 할 수 있습니까? 이것은 스레드 세이프 스토리지와 결합 될 수 있으므로 클래스 변수를 훨씬 덜 문제가됩니다. class_attribute의 가능한 수정은 무엇입니까?

업데이트 : the linked question above에서 설명한 바와 같이, 내 관심이 가져온 특정한 경우 내가 사용자별로 ActiveResource :: Base.user과 암호를 설정했다는 사실이

했다. 다시 설정하지 못하면 후속 페이지로드시 다른 사용자의 자격 증명을 사용하여 한 사용자 대신 REST 요청을하게됩니다.

답변

0

호기심에서 벗어난 이유에 대해 구체적인 예를 들어 줄 수 있습니까? 변수에 대한 변경을 요청하는 것처럼 들리므로 레일스는 사용자가 요구하는 것을 수행하고 있습니다.

지금까지 답변과 같은 몇 가지 옵션 :

  • 변수에 대한 자동 "다시 기본값으로 전환"행동이 아니, 없다.
  • 각 컨트롤러 동작이 끝날 때 수동으로 값을 재설정 할 수 있습니다.
  • 이 작업을 수행하는 모듈 ("acts_as_resettable"이라고도 함)을 작성한 다음 해당 모듈을 이 기능을 원하는 곳의 클래스들
+0

구체적인 예를 들기 위해 포스트를 업데이트했습니다. –

+0

class_attribute를 확장하는 것이 좋은 방법이 될 것 같습니다. 이미 원하는 동작 (상속 가능한 클래스 수준 특성)을 제공하기 때문입니다. 그것은 모든 요청에 ​​대해 저장하고 재설정 할 기본값을 전달할 수 있으며 스레드 안전성을 보장하기 위해 다른 게시글에서 제안 된 @KandadaBoggu와 같이 Thread.current를 사용할 수 있습니다. –

관련 문제