【发布时间】:2015-07-27 15:48:55
【问题描述】:
我正在尝试在 Rails 4 应用程序中使用全局常量来验证某些元素,例如电子邮件、种族等。我遵循了堆栈溢出文章 "How do you store custom constants in Rails 4" 中概述的方法,但没有成功。
我已将文件lib/constants.rb 定义为所有应用程序范围常量的位置。在我的config/application.rb 文件中,我包含了以下代码:
module Foo
class Application < Rails::Application
# extraneous code omitted
config.autoload_paths << Rails.root.join('lib') # added this line to include lib directory
end
end
我已经尝试了几个用于定义和加载常量的选项,但我仍然遇到错误。
尝试 1:使用定义常量的代码创建了一个文件 lib/constants.rb:
ETHNIC_GROUPS = ["N/A", "African American/Black", "American Indian", "Hispanic", "Puerto Rican",
"Alaskan Native", "Asian American/Pacific Islander", "Mexican American/Chicano"]
尝试 2:基于文章 "Auto-loading lib files in Rails 4" 的讨论,我稍微修改了文件名和代码以尝试以另一种方式加载常量。根据那篇文章,我定义了一个文件lib/Foo.rb(与config/application.rb 中的应用程序名称匹配):
module Foo
# Define custom constants for the application
ETHNIC_GROUPS = ["N/A", "African American/Black", "American Indian", "Hispanic", "Puerto Rican",
"Alaskan Native", "Asian American/Pacific Islander", "Mexican American/Chicano"]
end
这看起来基本上是猴子补丁,或者添加到config/application.rb 中定义的现有 Foo 模块 - 无论如何,我的假设。
每次更改后,我都会重新启动服务器、重新加载控制台等。无论我这样做多少次,我都会继续收到未初始化的常量错误。在控制台中,我尝试同时调用 ETHNIC_GROUPS 和 Foo::ETHNIC_GROUPS 均未成功。
感谢您对在 Rails 4 中使用全局应用程序常量的最佳实践的任何见解,以及对为什么这对我不起作用的见解。
【问题讨论】:
-
你可以把它放在 config/initializers...
标签: ruby-on-rails ruby-on-rails-4 constants