我尝试将数组作为参数传递,并在我的ERB文件中使用它。
class Erbfile
def initialize ec2
@ec2 = ec2
#@ec2 = ["Cleveland", "Denver", "Nashville"] #this one work
@template = File.read('./file.erb')
end
def render
ERB.new(@template).result( binding )
end
end
ec2=[]
ec2.instances.each do |instance|
tag_name = Facter::Util::Resolution.exec("...")
mystring = "#{tag_name}"
ec2 << mystring
puts "#{ec2_without_tags}" ### ["test.ec2.mycomany.int"]
@page = Erbfile.new("#{ec2}")
end
我在ERB文件中使用:
<th> <%= @ec2.join('<br />') %> </th>
我收到一个错误:
(erb):20:in `render': undefined method `join' for "[\"test.ec2.mycomany.int\"]":String (NoMethodError)
Did you mean? JSON
但如果我将手动插入一个数组到初始化方法,它将起作用。
@ec2 = ["Cleveland", "Denver", "Nashville"]
我做错了什么?
答案 0 :(得分:2)
您将数组的字符串表示形式传递到Erbfile类中。然后,您在该字符串上调用.join
。
如果您想在班级中收到一个数组,则需要传入数组。
将Erbfile.new("#{ec2}")
替换为Erbfile.new(ec2)
。