我正在将现有应用程序迁移到Rails 5,并使用Devise进行身份验证。数据库是Oracle12c。
我试图弄清楚每当用户查询数据库时如何在rails连接上执行以下sql。该上下文是架构触发器正确运行所必需的,并且该上下文应反映正在执行查询的用户的用户名。
begin
main.ENV_VAR.prc_set_context_value('UserContext', '#{current_user}');
end;
用户查询时是否有某种ActiveRecord挂钩可用于?有设计挂钩吗?我要重写ActiveRecord :: Base吗?
感谢您的帮助。
答案 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
。