Rails:在初始化文件中创建一个哈希并使用它

时间:2012-05-12 16:15:09

标签: ruby-on-rails ruby

我在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_STRLAST_STR没有问题,但是当我尝试使用new_user_hash时,我收到以下错误消息:

  

未定义的局部变量或方法`new_user_hash'用于#<#:0x007f8da5752da0>

是否无法在一个文件中定义/声明哈希并在另一个文件中使用它?

2 个答案:

答案 0 :(得分:7)

我认为您可能会遇到范围界定 - new_user_hash是本地的,可能无法用于其他应用程序。如果您将其设为全局(通过调用它$new_user_hash),它将可用。在FIRST_STRLAST_STR的情况下,它们是有效的全局变量的常量。

将您的代码更新为:

$new_user_hash = { "first" => FIRST_STR, "last" => LAST_STR }

NEW_USER_HASH  = { "first" => FIRST_STR, "last" => LAST_STR }

您将可以从应用程序的其他部分访问$new_user_hashNEW_USER_HASH

另一个策略是定义一个模块:

module MyAppConfig
  NEW_USER_HASH = { "first" => FIRST_STR, "last" => LAST_STR } 
end

然后在其他地方,您可以通过在模板名称前加上前缀来访问它:

MyAppConfig::NEW_USER_HASH["first"]

这是一种更被接受的方法,因为它不会创建更多的全局变量。

答案 1 :(得分:0)