就这么简单
require 'erb'
a = "això és una merda <%=rand(1..20)%>"
c = {"id" => "això és una merda <%=rand(1..10)%>"}
如果你运行
ERB.new(a).result
,那么一切都很好:
ERB.new(a).result
=> "això és una merda 3"
但是
ERB.new(c).result
ruby 抱怨 encoding
:
ERB.new(c).result
/usr/lib/ruby/3.0.0/erb/compiler.rb:315:in `compile': undefined method `encoding' for {"id"=>"això és una merda <%=rand(1..10)%>"}:Hash (NoMethodError)
from /usr/lib/ruby/3.0.0/erb.rb:351:in `initialize'
from (irb):57:in `new'
from (irb):57:in `<main>'
from /usr/lib/ruby/gems/3.0.0/gems/irb-1.4.2/exe/irb:11:in `<top (required)>'
from /usr/bin/irb:25:in `load'
from /usr/bin/irb:25:in `<main>'
我的所有文件都是UTF-8。
为什么会这样?我怎样才能运行这段代码? (我可以将
c
转换为 string
,但我想要作为 Hash
)
ERB.new
从模板字符串构造一个 ERB
实例。
result_with_hash
:
require 'erb'
erb = ERB.new("The id is <%= id %>")
h = { id: '123' }
erb.result_with_hash(h)
#=> "The id is 123"