0

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

[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 (表单构建器)未定义。

我做错了什么(显然),但我怎样才能坚持实施理念?

4

2 回答 2

0

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

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

我会使用部分模板,但如果您真的想使用部分布局,请查看问题的第二个答案。它解释了如何设置部分布局。此外,RailsGuides有一个关于渲染布局的精彩部分,您可能应该检查一下。

于 2013-03-12T00:34:28.353 回答
0

我发现它非常简单:只需在模板中创建form_for并在视图中使用fields_for。Fields_for 为您提供了一个表单构建器,但不会创建 html-form...

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

PS: I found NO way in passing parameters from the template to the view, like <%= yield AweSomeParameter %>...

于 2013-03-12T15:11:11.693 回答