在ActiveRecord查询执行之前调用Oracle包函数

问题描述 投票:1回答:1

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

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

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

是否有某种ActiveRecord挂钩可供用户查询时使用?是否有使用Devise钩子?我是否覆盖ActiveRecord :: Base?

谢谢你的帮助。

ruby-on-rails devise ruby-on-rails-5 oracle12c
1个回答
2
投票

我对Oracle一无所知,所以根据有意义调整execute命令本身。这应该在你的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

© www.soinside.com 2019 - 2024. All rights reserved.