当使用哈希作为 ERB 模板时,ruby 抱怨“编码”

问题描述 投票:0回答:1

就这么简单

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

ruby hash erb
1个回答
0
投票

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"
© www.soinside.com 2019 - 2024. All rights reserved.