ruby-on-rails - 在 Rails 的 lib 文件夹中访问全局变量?
问题描述
因此,在我的 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 中有一个文件,它是整个项目中唯一无权访问此变量的文件。我尝试在 application_controller 中的 switch_locale 方法中设置一个 gloval 变量,例如
@locale = I18n.locale
但话又说回来,我无法从此文件中访问变量@locale。我真的很困惑,这是怎么回事?起初我以为这个文件在 application.rb 之前执行了一次,然后我放了一些记录器,我发现这不是问题,记录器不时执行。
所以我的问题是,为什么它没有访问权限?为什么无法从 init.rb 访问 application_controller 中设置的变量?为什么我也无法访问全局变量@locale?
我真的很困惑,所以感谢任何可以帮助我的人。
我尝试过的事情:
- 使用 config.eager_load_paths 将这些文件的路径放在 application.rb 中
- 在 config/initializers 中创建一个重新加载 lib 文件夹的文件,并在 application_controller 中创建一个函数,该函数在 before_filter 甚至 around_action 作为我的其他函数执行
这些都不起作用,因为问题不是文件的自动加载,而是对该变量的访问。
编辑:以防万一,但 lib/ 文件夹不在 app/. 他们处于同一水平。我阅读了一些解决方案,例如将 lib/ 文件夹放在 app/ 中,但我不想这样做,因为我也看到它不是一个好的解决方案。
编辑2:正如建议的那样,我尝试使用 $ 而不是 @ 并且也不起作用,就像 init.rb 不知道这个变量一样。
解决方案
推荐阅读
- javascript - 页面重新加载和执行功能后倒计时重置
- javascript - Electron:如何从焦点窗口中获取选定的文本?
- android - 显示或隐藏应用软键盘时 Android 应用冻结
- python - 如何使用python获取特定行中的时间差包含在一列数据中
- python - Geopy geopy.distance 忽略高度规范?
- mysql - 需要知道这在 SQL 中是否可行
- php - If 条件下的函数触发
- angular - json反序列化期间的类型不匹配
- linux - 我想在不同的选项卡/终端上的同一个 shell 脚本中运行一些命令
- mysql - 'getLastRecord ORDER BY id DESC LIMIT'附近的sql错误