【问题标题】:Invoking Oracle package function before ActiveRecord query executions在 ActiveRecord 查询执行之前调用 Oracle 包函数
【发布时间】:2019-02-22 19:11:43
【问题描述】:

我正在将现有应用程序迁移到 Rails 5 并使用 Devise 进行身份验证。数据库是Oracle12c。

我试图弄清楚当用户查询数据库时如何在 rails 连接上执行以下 sql。架构触发器正确运行需要此上下文,并且此上下文应反映正在执行查询的用户的用户名。

begin 
   main.ENV_VAR.prc_set_context_value('UserContext', '#{current_user}'); 
end;

是否有某种 ActiveRecord 钩子可以在用户查询时使用?有设计钩子可以使用吗?我是否覆盖 ActiveRecord::Base?

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails devise ruby-on-rails-5 oracle12c


    【解决方案1】:

    我对Oracle一无所知,所以根据有意义的情况调整执行命令本身。这应该在您的ApplicationController 或您设计authenticate_user! 回调的任何基本控制器中,并确保在回调之后:

    before_action :authenticate_user!
    before_action :set_user_context
    
    protected
    def set_user_context
      if current_user
        ApplicationRecord.connection.execute "main.ENV_VAR.prc_set_context_value('UserContext', '#{current_user.id}')"
      end
    end
    

    请注意,我还将您的 current_user 切换为 current_user.id

    【讨论】:

      猜你喜欢
      • 2014-12-09
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 2012-12-29
      • 1970-01-01
      • 2015-07-27
      • 2010-10-11
      • 2018-01-27
      相关资源
      最近更新 更多