Ruby:erb抛出错误“`结果';:can';t将字符串转换为整数(TypeError)";
快速背景:我正在设置一个快速而肮脏的模板方案,其中我所有的模板文件都命名为“*.erb”。填充数据驻留在yaml文件中。输出到模板名称减去“.erb”的文件 我没有对erb做太多的工作,我得到了错误“`result':无法将字符串转换为整数(TypeError)”。。。这对我来说没什么意义 下面是完成这项工作的类(generate_interface.rb): 模板文件(test.txt.erb): 最后,输出和错误消息:Ruby:erb抛出错误“`结果';:can';t将字符串转换为整数(TypeError)";,ruby,erb,typeerror,Ruby,Erb,Typeerror,快速背景:我正在设置一个快速而肮脏的模板方案,其中我所有的模板文件都命名为“*.erb”。填充数据驻留在yaml文件中。输出到模板名称减去“.erb”的文件 我没有对erb做太多的工作,我得到了错误“`result':无法将字符串转换为整数(TypeError)”。。。这对我来说没什么意义 下面是完成这项工作的类(generate_interface.rb): 模板文件(test.txt.erb): 最后,输出和错误消息: $ ruby -d test.rb Exception `NoMetho
$ ruby -d test.rb
Exception `NoMethodError' at /usr/lib/ruby/1.8/rational.rb:78 - undefined method `gcd' for Rational(1, 2):Rational
i: {"test_id"=>XXX123}
i['test_id']: XXX123
( i['test_id'] ).to_s: XXX123
erbfile: "test.txt.erb"
outfile: "test.txt"
template: "Line 1\nLine 2 test_id: <%= i['test_id'] %>\nLine 3\n"
message: #<ERB:0xb74ac150 @src="_erbout = ''; _erbout.concat \"Line 1\\nLine 2 test_id: \"\n; _erbout.concat(( i['test_id'] ).to_s); _erbout.concat \"\\nLine 3\\n\"\n\n; _erbout", @safe_level="%<>", @filename=nil>
Exception `TypeError' at /usr/lib/ruby/1.8/erb.rb:715 - can't convert String into Integer
/usr/lib/ruby/1.8/erb.rb:715:in `result': can't convert String into Integer (TypeError)
from /usr/lib/ruby/1.8/erb.rb:714:in `call'
from /usr/lib/ruby/1.8/erb.rb:714:in `result'
from ./generate_interface.rb:26:in `gobutton'
from ./generate_interface.rb:17:in `map'
from ./generate_interface.rb:17:in `gobutton'
from test.rb:6
$ruby-d test.rb
异常'NoMethodError'位于/usr/lib/ruby/1.8/rational.rb:78-rational(1,2)的未定义方法'gcd':rational
i:{“测试id”=>XXX123}
i['test_id']:XXX123
(i['test_id'])。收件人:XXX123
erbfile:“test.txt.erb”
输出文件:“test.txt”
模板:“第1行\n第2行测试\u id:\n第3行\n”
信息:#
位于/usr/lib/ruby/1.8/erb.rb:715的异常“TypeError”-无法将字符串转换为整数
/usr/lib/ruby/1.8/erb.rb:715:“结果”中:无法将字符串转换为整数(TypeError)
from/usr/lib/ruby/1.8/erb.rb:714:in'call'
from/usr/lib/ruby/1.8/erb.rb:714:in'result'
from./generate_interface.rb:26:in'gobutton'
from./generate_interface.rb:17:in`map'
from./generate_interface.rb:17:in'gobutton'
来自测试。rb:6
我认为_erbout.concat((I['test\u id'])to_s有问题,但当我显式打印(I['test\u id'])to_s时,我得到了我所期望的“XXX123”。(你的generate\u interface.rb粘贴没有完成最后的end
)
直接的问题是,Erb.initialize
的第二个参数是安全级别;第三个是修剪选项。您的修剪选项被解释为安全级别
要解决这个问题,就要改变
message = ERB.new(template, "%<>" )
到
在下面的行中,将message.result
更改为result
Line 1
Line 2 test_id: <%= i['test_id'] %>
Line 3
#! /usr/bin/ruby
require "generate_interface"
test_interface = GenerateInterface.new( "test.yaml" )
test_interface.gobutton
$ ruby -d test.rb
Exception `NoMethodError' at /usr/lib/ruby/1.8/rational.rb:78 - undefined method `gcd' for Rational(1, 2):Rational
i: {"test_id"=>XXX123}
i['test_id']: XXX123
( i['test_id'] ).to_s: XXX123
erbfile: "test.txt.erb"
outfile: "test.txt"
template: "Line 1\nLine 2 test_id: <%= i['test_id'] %>\nLine 3\n"
message: #<ERB:0xb74ac150 @src="_erbout = ''; _erbout.concat \"Line 1\\nLine 2 test_id: \"\n; _erbout.concat(( i['test_id'] ).to_s); _erbout.concat \"\\nLine 3\\n\"\n\n; _erbout", @safe_level="%<>", @filename=nil>
Exception `TypeError' at /usr/lib/ruby/1.8/erb.rb:715 - can't convert String into Integer
/usr/lib/ruby/1.8/erb.rb:715:in `result': can't convert String into Integer (TypeError)
from /usr/lib/ruby/1.8/erb.rb:714:in `call'
from /usr/lib/ruby/1.8/erb.rb:714:in `result'
from ./generate_interface.rb:26:in `gobutton'
from ./generate_interface.rb:17:in `map'
from ./generate_interface.rb:17:in `gobutton'
from test.rb:6
message = ERB.new(template, "%<>" )
message = ERB.new(template, nil, "%<>" )
result = message.result
result = message.result(binding)