1

저는 보석으로 정의 된 모델을 가지고 있습니다 (Google :: APIClient.new). 저는 컨트롤러에 그 보석의 인스턴스를 만들었습니다.보석 모델 인스턴스를 유지하는 방법은 무엇입니까?

각 사용자마다 컨트롤러 작업 전반에 걸쳐 인스턴스를 공유하고 싶습니다. 어떻게 든 유지해야합니다. 세션 변수 (세션 [: 클라이언트] = Google :: APIClient.new) 및 작동하지 않는 하나의 내 자신의 모델 (User.goog_client = Google :: APIClient.new) 필드에 저장하려고했습니다. . 각 사용자별로 다른 보석에서 모델을 유지하는 적절한 방법이 있습니까?

미리 감사드립니다.

SOLN : 당신은 예를 들어 컨트롤러에 필터를 추가 할 수 있습니다

session[:access_token] = client.authorization.access_token 
    session[:refresh_token] = client.authorization.refresh_token 
    session[:expires_in] = client.authorization.expires_in 
    session[:issued_at] = client.authorization.issued_at 

    client.authorization.access_token = session[:access_token] 
    client.authorization.refresh_token = session[:refresh_token] 
    client.authorization.expires_in = session[:expires_in] 
    client.authorization.issued_at = session[:issued_at] 

답변

1

그것은 당신처럼 소리 : 간단한 SOLN이 다음 세션의 속성을 저장하는 모델로 그들을 다시 찾을 수 ActiveRecord :: Base로부터 상속받은 이러한 객체에 대한 래퍼 클래스를 만들 수 있습니다.

래퍼 객체의 속성은 보석을 통해 객체를 인스턴스화하는 데 필요한 정보입니다. 그런 다음 그렇게하는 파인더 메서드를 만들거나 재정의합니다.

class FooWrapper < ActiveRecord::Base 

    attr_accessible :x, :y, :z 

    def self.get_real_foo(wrapper_id) 
    wrapper_obj = self.find(wrapper_id) 
    return FooGem.new(wrapper_obj.x, wrapper_obj.y, wrapper_obj.z) 
    end 
end 

세션 및 모델에 개체를 저장하려고 했습니까? 그걸 정확히 어떻게 알았 니? 이것은 실제로 귀하의 문제를 해결하는 최선의 방법은 아닐 수도 있습니다 ... 더 구체적인 내용을 게시하면 올바른 길을 찾는데 도움이 될 것입니다.

편집 추가 : 당신은 보석 인스턴스가 특정 사용자에게 연결되도록하려면

다음 FooWrapper :belongs_to :user을합니다. 실제 보석 인스턴스를 인스턴스화하면 필요에 따라 사용자 별 정보를 사용합니다.

+0

안녕하세요 vpsz, 귀하의 제안에 따라 내 질문을 업데이 트되었습니다. –

+0

vpsz에 답변 해 주셔서 감사합니다. 감사합니다. –

1

class YourController < ApplicationConroller 
    before_filter :get_instance 

    def action1 
    #you can use @instance here 
    end 

    def action2 
    #you can use @instance here 
    end 

    private: # Hide from outside 
    def get_instance 
     @instance = CreateYourGemInstanceHere 
    end 
end 
+0

달콤한. 내 질문에이 질문을 넣어야했는데 사용자마다 고유 한 보석 인스턴스를 원한다면 어떻게해야합니까? –

+0

고유성을 위해 보석 모델에서 사용자로 범위를 추가해야합니다. – dealer

+0

user99090에 답변 해 주셔서 감사합니다. 감사합니다. –

관련 문제