Использование задач OpenStruct с ERB

Править: забыл включать мою информацию о среде Win7x64, RubyInstaller Ruby v1.9.1-p378

РЕДАКТИРОВАНИЕ 2: просто обновленный к v1.9.1, исправьте 429, и все еще получение этой той же ошибки.

Редактирование 3: выполнение этого того же кода в Ruby v1.8.7, патч 249, хорошо работает. таким образом, это - v1.9.1, который повредил его, по-видимому.

Я плохо знаком с использованием ERB и образцов, которые я мог найти... ummm... менее, чем полезен... игравший вокруг с ERB приблизительно в течение часа, я получил некоторые основные примеры, работающие (наконец), но я понятия не имею, почему это не работает...

require 'ostruct'
require 'erb'

data = {:bar => "bar"}
vars = OpenStruct.new(data)

template = "foo "
erb = ERB.new(template)

vars_binding = vars.send(:binding)
puts erb.result(vars_binding)

этот код производит следующую ошибку:

irb(main):007:0> puts erb.result(vars_binding)
NameError: undefined local variable or method `bar' for main:Object
        from (erb):1
        from C:/Ruby/v1.9.1/lib/ruby/1.9.1/erb.rb:753:in `eval'
        from C:/Ruby/v1.9.1/lib/ruby/1.9.1/erb.rb:753:in `result'
        from (irb):7
        from C:/Ruby/v1.9.1/bin/irb:12:in `'

почему это смотрит на main:Object привязка? Я сказал этому использовать привязку от OpenStruct путем передачи в vars_binding

кто-то может заполнить меня на том, почему это не работает и помогает мне заставить это работать?

15
задан Matt 20 February 2011 в 00:55
поделиться

1 ответ

Как выглядит ваше окружение? Этот код сработал у меня (я просто изменил строку "bar" на "baz", чтобы разграничить в своем мозгу, и добавил его в шаблон):

require 'ostruct'
require 'erb'

data = {:bar => "baz"}
vars = OpenStruct.new(data)

template = "foo <%= bar %>"
erb = ERB.new(template)

vars_binding = vars.send(:binding)
puts erb.result(vars_binding)

Когда я запускаю его, я получаю:

defeateds-MacBook-Pro:Desktop defeated$ ruby erb.rb 
foo baz

Под 1.8.7 на OSX:

defeateds-MacBook-Pro:Desktop defeated$ ruby -v
ruby 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0]
2
ответ дан 1 December 2019 в 02:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: