Rails从settings.yml读取

时间:2015-05-11 08:09:07

标签: ruby-on-rails ruby ruby-on-rails-4

嗨是否可以从控制器读取设置yml?我使用rails 4.2.0

我想在settings.yml中存储一些全局信息,以显示视图中的那些信息

此刻我尝试这样:

settingsfile = File.read(Rails.root + "./config/settings.yml")
settingsfile = YAML.load(settingsfile)
settingsfile["default"]

有效,但当我想要更深入时

settingsfile["default"]["info"]

Yml文件

default:
  supported_languages:
    de: Deutsch
    fr: Francais
    en: English
    it: Italiano
    sv: Svenska
    pt: Português
    nl: Nederlands
    es: Español
  production:
  info:
    version: 2.0.0
    datum: 11.05.2015

4 个答案:

答案 0 :(得分:3)

不使用gem ..你可以使用像..

这样的东西

您的dev / config / email.yml

 development:
  :address: smtp.service.com
  :port: 25
  :user_name: mike@gmail.com
  :password: mikepassword
production:
  :address: smtp.gmail.com
  :port: 587
  :authentication: plain
  :user_name: mike@gmail.com
  :password: mikepassword
  :enable_starttls_auto: true

您可以加载此yml文件,就像....

  email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/email.yml"))
 ActionMailer::Base.smtp_settings = email_settings[Rails.env] unless email_settings[Rails.env].nil?

答案 1 :(得分:1)

看看宝石rails_config

答案 2 :(得分:1)

您可以尝试使用BetterSettingssettingslogic之类的解决方案,该解决方案提供了一种将YML文件加载到设置对象中的简单方法。

两个库都可以使用方法调用轻松访问设置:

class Settings < BetterSettings
  source Rails.root.join('config/settings.yml'), namespace: :default
end

这将允许您访问以下设置:

Settings.info.version # '2.0.0'
Settings.supported_languages.es # 'Español'

在此示例中,我们使用:default作为名称空间,但您也可以使用Rails.env将设置的范围限定在特定环境中。

答案 3 :(得分:0)

您可以尝试:

@settingsvariable = Settings.default.supported_languages.de

这种方法适用于我的应用程序。