Rails 3 - 渲染内联form_tag

时间:2015-04-17 23:33:40

标签: ruby-on-rails ruby-on-rails-3

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

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

此处@erb_code返回用于呈现的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,错误是一样的。如何逃避form_tag中的render inline:

2 个答案:

答案 0 :(得分:1)

尝试将form_tag括在括号中

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

答案 1 :(得分:0)

此处render inline有效:

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

这里使用了动作视图的渲染(而不是ruby的ERB),变量models再次在locals内传递给内联。