3

长话短说:我的每个选项卡都有自己的表单,所以我决定制作一个单独的布局,并让表单本身作为布局的可变内容。

但是我需要将form_for放在布局中,而不是在每个表单中都有它,因为我在布局中有一些其他常见的表单元素。

那么如何将表单构建器的引用f传递给模板?

布局代码:

<% content_for(:content) do %>
  <%= form_for current_form do |f| %>
    <%= yield %>
    <%= f.submit "Submit" %>
  <% end %>
<% end %>

是否可以 ?

PS找到这个:干燥一个助手:包装form_for并访问本地表单变量(@rubish的答案),但<%= yield f %>似乎没有工作, f 仍然未定义视图。

4

2 回答 2

1

为什么不为选项卡制作一个通用模板(而不是布局),并为每个选项卡的内容使用部分模板?

然后您可以执行以下操作:

<%= render :partial => @tab_name, :locals => {:form => f} %>
于 2012-09-26T10:42:11.817 回答
0

您可以使用 render 的 layout 选项在 Rails 中渲染一个接受块的模板

假设您有一个要渲染几次的表单,但您希望每次都自定义提交部分。您可以通过将表单部分呈现为布局并传入块来实现此目的。然后,您的模板或部分模板将用作您传入的块的周围布局。然后您可以将表单返回到块并访问块中的表单。

record/_form.haml

= form_for record do |form|
  ...
  .form-actions
    yield(form)

为了使您的模板 record/_form.haml 在渲染时接受块,您可以使用渲染的布局选项将模板渲染为块的布局:

record/edit.haml

= render layout: 'form', locals: { record: record, ... } do |form|
  .form-actions--primary
    = form.button :submit
于 2020-09-03T21:54:18.737 回答