Rails - 可在任何地方使用的全局变量,包括控制器,视图和模型

时间:2012-12-16 19:23:30

标签: ruby-on-rails global-variables

我的问题看似简单,但一直很难以捉摸。我想要一个可以在应用程序中的任何位置调用的值 - 它是我们用于模型中验证的最小值,我们希望通知用户该值等。

到目前为止,我已经完成了以下工作:

在config / initializers中,我创建了一个新的.rb文件(根据我在另一个线程上找到的建议):

minimum = 15

只有在启动rails服务器后才能找到它。

我发现一个奇怪的建议是将en.yml中的值设置为最小值:15,与上述相同。

显然,应用程序助手和控制器无法帮助,因为我需要模型中的值。但我确实找到了一个解决方案,即将它放在config / application.rb中的类Application中:

config.after_initialize do
    ::Minimum = 15
end

然后将其称为:

MyApp::Application::Minimum

显然,这个解决方案虽然有效但并不理想。如果我能找到一种方法将MyApp :: Application :: Minimum别名为“最小”,我会完全满意,但是从初学者那里完成它是一个更好的解决方案。

1 个答案:

答案 0 :(得分:1)

如果需要,您可以在模型中粘贴某些东西并从任何地方调用它:

Couriers = %w[TNT UPS RoyalMail Bike Hand Pigeon Other]

但我更喜欢将它们放在yaml文件中。

在configs目录中创建一个config.yml文件,并将你的vars放在那里:

defaults: &defaults

   node_1: '10.8'
   node_2: '10.9'
   node_3: '10.0'

   whatever: 1
   thereis: 2

development:
  <<: *defaults

playground:
  <<: *defaults

production:
  <<: *defaults

poststaging:
  <<: *defaults

test:
  <<: *defaults

在初始化程序目录中使用类似的东西加载配置文件。在/ config / initializers中创建一个名为'load_vars.rb'的文件,并将以下内容放在那里:

SETTINGS = YAML.load_file("#{Rails.root}/config/config.yml")[Rails.env]

尽管如此,您必须重新启动服务器。

- 编辑 -

要使用这些变量,您可以从模型,控制器,视图中加载类似的内容:

SETTINGS['var_1']