我在initializers目录中使用一个文件来声明常量,以便在应用程序的不同部分使用。
FIRST_STR = "First Name"
LAST_STR = "Last Name"
new_user_hash = Hash.new
new_user_hash[ "first" ] = FIRST_STR
new_user_hash[ "last" ] = LAST_STR
我在应用程序的不同部分使用FIRST_STR
和LAST_STR
没有问题,但是当我尝试使用new_user_hash
时,我收到以下错误消息:
未定义的局部变量或方法`new_user_hash'用于#<#:0x007f8da5752da0>
是否无法在一个文件中定义/声明哈希并在另一个文件中使用它?
答案 0 :(得分:7)
我认为您可能会遇到范围界定 - new_user_hash
是本地的,可能无法用于其他应用程序。如果您将其设为全局(通过调用它$new_user_hash
),它将可用。在FIRST_STR
和LAST_STR
的情况下,它们是有效的全局变量的常量。
将您的代码更新为:
$new_user_hash = { "first" => FIRST_STR, "last" => LAST_STR }
或
NEW_USER_HASH = { "first" => FIRST_STR, "last" => LAST_STR }
您将可以从应用程序的其他部分访问$new_user_hash
或NEW_USER_HASH
。
另一个策略是定义一个模块:
module MyAppConfig
NEW_USER_HASH = { "first" => FIRST_STR, "last" => LAST_STR }
end
然后在其他地方,您可以通过在模板名称前加上前缀来访问它:
MyAppConfig::NEW_USER_HASH["first"]
这是一种更被接受的方法,因为它不会创建更多的全局变量。
答案 1 :(得分:0)