2016-09-30 48 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_save
  • before_create
  • before_destroy

您可以在這裏獲得更多的方法:http://guides.rubyonrails.org/active_record_callbacks.html

+0

不幸的是,在這種情況下,這些都不起作用。問題是關於從第三方數據存儲中設置一個實例變量,它不能保存在我們自己的數據庫中。因此,'after_initialize'是設置實例變量的唯一回調函數。從db中加載模型時,列出的列表不會觸發。 – amingilani

相關問題