Итак, в моем 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 не знает об этой переменной.