erb给我 - undefined局部变量或main方法:Object(NameError)

时间:2011-12-29 08:44:54

标签: ruby erb

除非erb模板中使用的变量是全局变量,否则erb会给我undefined local variable or method for main:Object (NameError)

这是正确的吗? on ruby​​ 1.8.7(2010-01-10 patchlevel 249)[i486-linux]

以下是可行的代码。如果我从变量名称($ db,$ db_root,$ db_root_password)中删除$,我会收到错误消息。

$db = get_single_argument("database name")
$db_root = get_single_argument("database root user name")
$db_root_passwd = get_single_argument("database root user password")

mysql_commands = get_conf_file("installer_mysql.erb")

puts mysql_commands.result  #gives me the error

get_conf_file 程序

def get_conf_file(file)

 return_array = Array.new
 if (File.exists?(file))
   return_array = ERB.new File.read(file)
 end
 return_array
end

2 个答案:

答案 0 :(得分:9)

Ruby有一个名为binding的概念,您可能将其视为一段代码可能具有的局部变量,self,block等值。您可能还会将绑定视为代码的上下文。

Erb的result方法采用可选的第二种方法,该方法用于评估您提供的代码,因此您可以执行类似

的操作
x = 1
ERB.new('x=<%= x %>').result(binding) #=> "x=1"

答案 1 :(得分:1)

你没有传递调用者的绑定,你应该是:

puts mysql_commands.result(binding)

绑定包含当前作用域中的所有变量引用。