2016-09-30 5 views
0

自分のユーザ情報がすべて第三者認証サービスに保存されているため、実際にデータを持たないデータベースモデルがあります。通常のモデルのようにモデルを使用できるようにするため、ロード時にAPIからすべての情報を取り出してインスタンス変数に格納します。ActiveModel :: Modelでbefore_action型コールバックを使用するにはどうすればよいですか?

before_actionは私のモデルのコールバックのように設定するにはどうすればよいですか?これを行うためのRubyの方法はありますか?

class Auth0User < ApplicationRecord 
    before_action set_instance_variables 

    validates :auth0_id, presence: true, 
         uniqueness: true 

    def info(key = nil) 
    key.nil? ? @user : @user[key.to_s] 
    end 

    private 

    def set_instance_variables 
    @user ||= auth0_api.user auth0_id 
    end 

    def auth0_api 
    Auth0Client.new(
     client_id: Rails.application.secrets.auth0_client_id, 
     token: Rails.application.secrets.auth0_management_jwt, 
     domain: Rails.application.secrets.auth0_domain, 
     api_version: 2 
    ) 
    end 
end 
+0

https://dockyard.com/blog/2013/08/20/design-patterns-observer-pattern – max

+0

http://guides.rubyonrails.org/active_record_callbacks.html – steel

答えて

0

はい、実際にあなたが選択するための方法がたくさんあったレール:

  • before_create
  • before_save before_destroy

あなたはより多くの方法のために、ここで確認できます。http://guides.rubyonrails.org/active_record_callbacks.html

+0

残念ながら、この文脈では、これらのどれもが機能しませんでした。問題は、独自のデータベースに保存できないサードパーティのデータストアからインスタンス変数を設定することです。したがって、 'after_initialize'はインスタンス変数を設定する唯一のコールバックです。 dbからモデルがロードされたときにリストしたものは起動しません。 – amingilani

関連する問題