在执行ActiveRecord查询之前调用Oracle软件包功能

时间:2019-02-22 19:11:44

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

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

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

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

用户查询时是否有某种ActiveRecord挂钩可用于?有设计挂钩吗?我要重写ActiveRecord :: Base吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我对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