【问题标题】:Globally accessible class that connects to the db during startup only仅在启动期间连接到数据库的全局可访问类
【发布时间】:2016-05-17 16:02:19
【问题描述】:

我想在我的 Rails 项目中创建一个可全局访问的类,该类还将包含一些活动记录结果集。

@settings = Settings.first
@locales = Locales.all
$websiteSettings = WebsiteSettings.new(@settings, @locales)

我应该在哪里创建这个类,初始化器是最好的地方吗?

我希望能够在我的控制器和视图中访问这个类。

我了解,如果数据库中的数据发生更改,我将不得不重新启动我的 rails 应用程序或更新这些全局实例。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    将其放入初始化程序并将其设置为global constant

    #config/initializers/settings.rb
    module Settings
      @settings = Settings.first
      @locales  = Locales.all
      WEBSITE   = WebsiteSettings.new(@settings, @locales)
    end
    

    这将允许您在整个应用程序中访问Settings::WEBSITE

    这仅适用于您通过ActiveRecord 调用数据的情况。


    如果您不通过数据库访问数据,最好使用众多 settings gems 之一,或者将设置直接添加到 Rails.config class

    #config/application.rb
    config.settings.title = "Test"  #-> Rails.configuration.settings.title
    

    --

    顺便说一句,我强烈建议您重构代码;您正在进行 3 次 db 调用以获取应用程序的一系列设置。

    当然,您可以将所有设置放在 Settings 模型中,范围围绕不同的语言环境:

    #config/initializers/settings.rb
    module Settings
      SETTINGS = Settings.where(locale: :en)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多