全局可访问的类,仅在启动期间连接到db

时间:2016-02-08 03:45:39

标签: ruby-on-rails

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

这样您就可以在整个应用中访问Settings::WEBSITE

仅当您通过ActiveRecord调用数据时才适用。

如果您没有通过数据库访问数据,那么您最好使用众多settings宝石中的一个,或者直接将设置添加到Rails.config class:< / p>

#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