在我们的 rails 3.2
应用程序中,我们的 View 代码(以 simple_form 形式)存储在 @erb_code
中,并以内联方式将其渲染为:
<%= simple_form_for @project do |f| %>
<%= render inline: ERB.new(@erb_code).result(binding) %>
<% end %>
@erb_code
是存储 View 代码的字符串。 @erb_code 中有一个 fields_for
block 会导致错误。这是 fields_for block :
.........
<%= f.simple_fields_for :contract do |builder| %>
<%= render('contract', :f => builder)%>
<% end %>
........
这是错误:
(erb):17: syntax error, unexpected ')'
...ds_for :contract do |builder| ).to_s); _erbout.concat " ...
... ^
(erb):21: syntax error, unexpected end-of-input, expecting ')'
...ut.force_encoding(__ENCODING__)
...
)
和 .to_s
添加在 |builder| 之后渲染时会导致错误。是逃逸问题吗?如果是,如何转义 |builder|
和/或 ERB.new()
中的任何其他内容?
最佳答案
请尝试以下操作:
<%= simple_form_for @project do |f| %>
<%= render inline: @erb_code, locals: {f: f} %>
<% end %>
即,不使用 ERB.new。根据需要添加更多本地人。
过去,我在 Rails 3.2.13 中使用内联渲染来实现类似目的。
关于ruby-on-rails - 如何逃脱|对于 ERB 中的 RAILS fields_for?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18618252/