首页 > 解决方案 > 在 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?

我真的很困惑,所以感谢任何可以帮助我的人。

我尝试过的事情:

这些都不起作用,因为问题不是文件的自动加载,而是对该变量的访问。

编辑:以防万一,但 lib/ 文件夹不在 app/. 他们处于同一水平。我阅读了一些解决方案,例如将 lib/ 文件夹放在 app/ 中,但我不想这样做,因为我也看到它不是一个好的解决方案。

编辑2:正如建议的那样,我尝试使用 $ 而不是 @ 并且也不起作用,就像 init.rb 不知道这个变量一样。

标签: ruby-on-railsrubyglobal-variablesrails-i18nlib

解决方案


推荐阅读