2016-09-06 2 views
1

Я пытаюсь передать массив как аргумент и использовать его в своем файле ERB.ruby ​​- вставить массив в метод initialize - undefined method `join 'for: String (NoMethodError)

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 

Я использую в файле Еврорадио:

<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

Нет способа ['String # join'] (http://ruby-doc.org/core-2.2.0/String.html), как говорит ошибка. Код, скорее всего, ожидает массив; ошибка показывает * строковое представление * некоторого массива (JSON) - исправить это. – user2864740

ответ

2

Вы передаете строковое представление своего массива в свой класс Erbfile. Затем вы вызываете .join на эту строку.

Если вы хотите получить массив в своем классе, вам необходимо передать в массив.

Заменить Erbfile.new("#{ec2}") на Erbfile.new(ec2).

+0

Стоит отметить, что шаблоны типа '' # {x} "' почти всегда являются ошибками. Пропустите эту переменную as-is. Если вам нужно преобразовать в строку: 'x.to_s' вместо этого. – tadman

 Смежные вопросы

  • Нет связанных вопросов^_^