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 %>