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



我的问题看似简单,但却难以捉摸。我想要一个可以在应用程序中任何地方调用的值——这是我们在模型中用于验证的最小值,我们希望将该值通知用户,等等。

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

在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别名为"Minimum",我会完全满意,但据我所知,在初始化器中完成它是一个更好的解决方案。

如果你愿意,你可以在模型中粘贴一些东西,并从任何地方调用它:

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

在initializers目录中使用类似的方法加载配置文件。在/config/initializers中创建一个名为"load_vars.rb"的文件,并在其中放入以下内容:

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

不过,在更改这些之后,您必须重新启动服务器。

--编辑--

要使用这些变量,你可以从你的模型、控制器、视图中加载这样的东西:

SETTINGS['var_1']

相关内容

  • 没有找到相关文章

最新更新