【发布时间】:2016-10-04 05:41:15
【问题描述】:
我正在尝试从 Ruby 中的多个对象插入 ERB 模板。如果变量的来源是一类,它工作得很好。当 ERB 包含不同类中存在的变量时,进行插值的最佳方法是什么。
这是我想要实现的精简版:
#!/usr/bin/ruby
require 'erb'
require 'pp'
class Person
attr_reader :first_name, :last_name
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
end
class Animal
attr_reader :animal_type
def initialize(type)
@animal_type = type
end
end
person = Person.new("John", "Doe")
animal = Animal.new("doggie")
template = "<%=first_name%> <%=last_name%> has a <%=type%>"
puts ERB.new(template).result(person.instance_eval { binding })
上述失败,undefined local variable or method 'type' 是正确的,因为该属性属于 Animal 类的对象。
我发现的一种解决方法是创建哈希并使用合并将它们合并为一个,但这意味着对现有代码进行大量更改。有没有更好的方法来实现这一目标?
【问题讨论】: