Вызов функции пакета Oracle перед выполнением запроса ActiveRecord - PullRequest
0 голосов
/ 22 февраля 2019

Я перевожу существующее приложение в Rails 5 и использую Devise для аутентификации.База данных - Oracle12c.

Я пытаюсь выяснить, как выполнить следующий sql для соединения rails всякий раз, когда пользователь будет запрашивать базу данных.Этот контекст необходим для правильной работы триггеров схемы, и этот контекст должен отражать имя пользователя, выполняющего запрос.

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

Есть ли какой-нибудь хук ActiveRecord, который можно использовать всякий раз, когда пользователь запрашивает?Есть ли крючок Devise для использования?Должен ли я переопределить ActiveRecord :: Base?

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 23 февраля 2019

Я ничего не знаю об 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.

...