我正在为我的 View 助手 (Rails 4.0) 编写一些测试,并尝试将 ERB 代码编译成一个字符串来执行它。但是,为了简单起见,我在这里使用了在 Rails 表单助手中找到的常用方法,但收到了相同的错误:
Failure/Error: ERB.new(template).result
SyntaxError:
(erb):1: syntax error, unexpected ')'
...out.concat(( field_set_tag do ).to_s); _erbout.concat "\n\t\...
... ^
(erb):4: syntax error, unexpected end-of-input, expecting ')'
; _erbout.force_encoding(__ENCODING__)
^
这是我正在执行的代码:
template = <<-TEMPLATE
<%= field_set_tag do %>
Lorem Ipsum
<% end %>
TEMPLATE
ERB.new(template).result
我找到了一些使用 <%
的建议而不是 <%=
但这导致 Lorem Ipsum
作为唯一的输出。我也尝试过使用 HAML 而不是 ERB,但得出了类似的结果。
如何让我的模板输出 <fieldset>Lorem Ipsum</fieldset>
使用 field_set_for
字符串中的助手?
最佳答案
“普通”Eruby 不允许使用 <%=
的表达式以 Rails 使用它们的方式阻止。 rails extends the Erubis Eruby handler to add support for them .您的测试只是尝试直接使用 Erb,因此不提供此支持。
您需要确保已加载此支持才能正常工作。我可以让它工作:
ActionView::Template::Handlers::Erubis.new(template).evaluate(ActionView::Base.new)
虽然我不知道这是不是最好的方法。查看 RSpec 文档,可能有更好的方法来测试像这样的部分 View 。
关于ruby-on-rails - 从字符串编译 ERB 代码时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27465389/