我尝试创建一个通用模板,其中包含具有动态内容的表单,例如由视图使用模板定义。 (我当前的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)未定义。
我做错了什么(显然),但我怎么能坚持实施的想法呢?
答案 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; ......