2016-09-30 2 views
0

У меня есть модель базы данных, на самом деле у которой нет данных, поскольку вся моя информация пользователя хранится в сторонней службе проверки подлинности. Я хочу иметь возможность использовать модель как обычную, поэтому при загрузке я извлекаю всю информацию из API и сохраняю ее в переменной экземпляра.Как использовать обратный вызов типа before_action с помощью ActiveModel :: Model?

Как настроить 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

К сожалению, в этом контексте ни одно из них не будет работать. Речь идет о настройке переменной экземпляра из стороннего хранилища данных, которая не может быть сохранена в нашем собственном db. Поэтому 'after_initialize' является единственным обратным вызовом, который устанавливает переменные экземпляра. Те, которые вы указали, не срабатывают при загрузке модели из db. – amingilani

Смежные вопросы