Доступ к глобальным переменным внутри папки lib в Rails? - PullRequest
0 голосов
/ 22 апреля 2020

Итак, в моем application_controller у меня есть метод с именем switch_locale, который выполняется все время (around_action), и метод устанавливает переменную с именем I18n.locale (связана с переводами)

def switch_locale(&action)
    if current_user
      I18n.locale = current_user.try(:preferred_locale) || I18n.default_locale
      I18n.with_locale(I18n.locale, &action)
    else
      I18n.with_locale(I18n.locale, &action)
    end
    $locale = I18n.locale
  end

Внутри моей папки lib у меня есть файл в /lib/module/name_of_module/config/init.rb, который является единственным во всем проекте, который не имеет доступа к этой переменной. Я попытался установить переменную gloval в методе switch_locale внутри application_controller, например

@locale = I18n.locale

, но опять же я не могу получить доступ к переменной @locale из этого файла. Я действительно запутался, что происходит? Сначала я думал, что этот файл выполняется только один раз перед application.rb, затем я установил несколько регистраторов и увидел, что проблема не в этом, время от времени выполняются регистраторы.

поэтому мой вопрос: почему у него нет доступа? почему переменная, установленная в application_controller, недоступна из файла init.rb? почему я не могу получить доступ к глобальной переменной @locale?

Я действительно запутался, так что спасибо всем, кто может мне помочь.

То, что я пробовал:

  • указание пути к этим файлам в application.rb с помощью config.eager_load_paths
  • создание файла в config / initializer, который перезагружает папку lib и создает внутри application_controller функцию, которая выполняется как before_filter или даже around_action, как моя другая функция

ни одна из них не работала, поскольку проблема заключалась не в автозагрузке файлов, а в доступе к этой переменной.

edit: на всякий случай, но папка lib / не находится внутри app /. они на одном уровне. Я прочитал некоторые решения, такие как размещение папки lib / в app /, но я не хочу этого делать, поскольку я также увидел, что это не очень хорошее решение.

edit2: как было предложено, я попытался использовать $ вместо @ и также не работает, как будто init.rb не знает об этой переменной.

...