Rails 3 - 内联渲染 form_tag

Rails 3 - render inline form_tag

我们在index视图渲染中使用render inline:

<%= render inline: ERB.new(@erb_code).result(binding) %>

此处@erb_codereturns一个字符串,用于index视图渲染代码。在将 form_tag 添加到 @erb_code 之前,代码工作正常。错误是:

(erb):8: syntax error, unexpected ')'
...@project.id), method: :get do ).to_s); _erbout.concat "\r\n\...
...                               ^
(erb):63: syntax error, unexpected end-of-input, expecting ')'
; _erbout.force_encoding(__ENCODING__)
                                      ^

这是添加的 form_tag 代码:

<%= form_tag onboard_engine_configs_path(format: "csv", :project_id => @project.id), method: :get do %>
          <%= label_tag(:from_release, "Release") %>
          <%= select_tag(:from_release, options_for_select(releases.select('id, name').map{|r| [r.name, r.id]})) %>      
          <%= submit_tag 'CSV' %>
  <% end %>

如果直接渲染@erb_code,则没有错误。

index.erb.html是:

<%= render partial: 'form_list', locals: {models: @onboard_engine_configs} %> 

我们知道问题出在 render inline:。试过 render inline: @erb_code ,错误是一样的。如何在 render inline: 中转义 form_tag

尝试将您的 form_tag 括在方括号中

<%= form_tag(onboard_engine_configs_path(format: "csv", :project_id => @project.id), method: :get) do %>

此处 render inline 有效:

<%= render inline: @erb_code, locals: {models: models} %>

这里使用动作视图的渲染(而不是 ruby 的 ERB)并且变量 modelslocals 中再次传入到内联。