ruby - 在initialize方法中插入一个数组 - 未定义的方法`join'for:String(NoMethodError)

时间:2016-09-06 17:03:06

标签: ruby erb

我尝试将数组作为参数传递,并在我的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"]

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您将数组的字符串表示形式传递到Erbfile类中。然后,您在该字符串上调用.join

如果您想在班级中收到一个数组,则需要传入数组。

Erbfile.new("#{ec2}")替换为Erbfile.new(ec2)