Ruby 为何雇员再培训局会出现这个错误?

Ruby 为何雇员再培训局会出现这个错误?,ruby,erb,Ruby,Erb,如果查看由erb-x-T-test.erb输出的代码: #编码:ASCII-8BIT _erbout=''_erbout.concat“\n” ; _erbout.concat((form.field\u container:name do).to\s)_erbout.concat“\n” ; _erbout.concat“_erbout.concat((form.label:name,raw('name'+content_标记(:span,*',:class=>'required'))).to

如果查看由
erb-x-T-test.erb
输出的代码:

#编码:ASCII-8BIT
_erbout=''_erbout.concat“\n”
; _erbout.concat((form.field\u container:name do).to\s)_erbout.concat“\n”
; _erbout.concat“_erbout.concat((form.label:name,raw('name'+content_标记(:span,*',:class=>'required'))).to_s)_erbout.concat“\n”
; _erbout.concat“_concat((form.text_字段:name,:class=>'fullwidth')。to_s)_erbout.concat“\n”
; _erbout.concat“_erbout.concat((form.error\u message\u on:name).to\s)_erbout.concat“\n”
; _erbout.concat“;结束_erbout.concat“\n”
; _erbout.concat“\n”
; _erbout.force_编码(_编码)
您可以看到,在第三行,一个
do
后面跟着一个
。Ruby需要一个
do
end
块,但会得到一个右括号。这是语法错误的直接原因

erb
输出错误代码的原因是您正在使用

我无法运行此代码来测试它在我的更改后是否输出了它应该输出的内容,但是
erb
生成的代码看起来可以工作:

#编码:ASCII-8BIT
_erbout=''_erbout.concat“\n”
;  form.field_容器:名称do_erbout.concat“\n”
; _erbout.concat“_erbout.concat((form.label:name,raw('name'+content_标记(:span,*',:class=>'required'))).to_s)_erbout.concat“\n”
#更多。。。
编辑 由于此解决方案显然会破坏输出,因此我研究了建议的内容。我检查了它是否与ERB的行为不同。
erubis-x-T-test.erb
输出的代码(带有原始的未编辑的
test.erb
):


\u buf=''_buf短版:没有什么不对;Rails做了一些疯狂的事情

长版本:你只能这样做

$ erb -x -T - test.erb | ruby -c
-:3: syntax error, unexpected ')'
...form.field_container :name do ).to_s); _erbout.concat "\n"
...                               ^
-:9: syntax error, unexpected $end, expecting ')'


(也就是说,使用
这个问题的一个重要部分:这段代码,所以它实际上不是一个错误。AFAIK Rails实际上使用了,所以不要期望Rails和普通erb的工作方式完全相同。另一个帮助回答是:@DanielFischer我不确定
form.field\u container
是否应该向输出返回一个值。因为是的,那么

$ erb -x -T - test.erb | ruby -c
-:3: syntax error, unexpected ')'
...form.field_container :name do ).to_s); _erbout.concat "\n"
...                               ^
-:9: syntax error, unexpected $end, expecting ')'
<%= some_method do %>
<% end %>