在渲染视图期间使用form_for formBuilder在模板中定义?

时间:2013-03-11 15:05:59

标签: ruby-on-rails templates

我尝试创建一个通用模板,其中包含具有动态内容的表单,例如由视图使用模板定义。 (我当前的impl。失败,因为视图在呈现过程中抱怨 f (formbuilder)未定义。

[Rails 1.9.6] 我的模板名为“LAY”

  <%= form_for @q_object, :url => request.fullpath do |f|%>
    <!--Do something that happens on every page --> 
    <table>
      <%= yield %>
      <tr><td style="text-align: center">
          <%= f.submit "Submit" %>
        </td></tr>
    </table>
  <%end%>

我的观点

<tr><td>
  <%= f.text_area :txt, :rows => 6, :cols => -1, :style => "width:100%" %>
 </td></tr>

我的控制器

class Controller < ApplicationController
  layout "LAY"

我的问题 在渲染期间,视图轨道抱怨f(formbuilder)未定义。

我做错了什么(显然),但我怎么能坚持实施的想法呢?

2 个答案:

答案 0 :(得分:0)

为什么需要将其设为布局?您可以将其设为模板,然后为您想要的每种类型的表单提供部分模板。如果你这样做,那么你可以像这样渲染你的个别部分并将它们传递给表单构建器。

<%= render :partial => @unique_fields_name, :locals => {:f => f} %>

我会使用部分模板,但如果您真的想使用部分布局,请在THIS问题上查看第二个答案。它解释了如何设置部分布局。此外,RailsGuides在渲染布局方面有很好的部分,你应该检查一下。

答案 1 :(得分:0)

我发现它非常简单: 只需在模板中创建 form_for ,然后在视图中使用 fields_for 。 Fields_for为您提供了formbuilder,但没有创建html-form ...

<%=fields_for @q_object, nil, {:builder => MyFormBuilder} do |f|%>
      <%= f.text_area :txt, :rows => 6, :cols => -1, :style => "width:100%" %>
<%end%>

PS:我发现没有办法将参数从模板传递到视图,例如&lt;%= yield AweSomeParameter%&gt; ......