如何在ActiveModel :: Model中使用before_action类型回调?

时间:2016-09-30 14:53:27

标签: ruby-on-rails ruby activerecord

我有一个实际上没有任何数据的数据库模型,因为我的所有用户信息都存储在第三方认证服务上。我希望能够像常规模型一样使用模型,因此在加载时,我从API获取所有信息并将其存储在实例变量中。

如何为我的模型设置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

2 个答案:

答案 0 :(得分:0)

after_intialize完全符合我的需要。

答案 1 :(得分:0)

是的,实际上rails有很多方法供您选择:

  • before_save
  • before_create
  • before_destroy

您可以在此处查看更多方法:http://guides.rubyonrails.org/active_record_callbacks.html