Ruby on rails RubyonRails将引用传递给yield(模板)

Ruby on rails RubyonRails将引用传递给yield(模板),ruby-on-rails,ruby,reference,block,yield,Ruby On Rails,Ruby,Reference,Block,Yield,长话短说:我的每个选项卡都有自己的表单,所以我决定制作一个单独的布局,并将表单本身作为布局的可变内容 但是我需要在布局中使用表单,而不是在每个表单中使用它,因为布局中还有一些其他常见的表单元素 那么,如何将表单生成器的引用f传递给模板 布局代码: <% content_for(:content) do %> <%= form_for current_form do |f| %> <%= yield %> <%= f.submit "S

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

但是我需要在布局中使用表单,而不是在每个表单中使用它,因为布局中还有一些其他常见的表单元素

那么,如何将表单生成器的引用f传递给模板

布局代码:

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

可能吗


p.S发现了这个:(@rubish的答案),但是
似乎不起作用,f对于视图仍然没有定义

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

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

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

您可以使用render的布局选项在Rails中呈现接受块的模板

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

record/_form.haml

= form_for record do |form|
  ...
  .form-actions
    yield(form)
为了使模板记录/_form.haml在渲染时接受块,可以使用render的布局选项将模板渲染为块的布局:

record/edit.haml

= render layout: 'form', locals: { record: record, ... } do |form|
  .form-actions--primary
    = form.button :submit

有人在吗?需要帮助!:P@rubish,你能帮我做这个吗?那我们为什么需要布局呢?只是在这里使用partials似乎不太合适。你是说没有办法通过f吗?我不知道是否有办法从版面传递到模板。这只是一个可以解决你问题的想法——可能还有其他的方法。我认为布局的价值在于,所有从控制器调用的模板都可以自动嵌套在布局中。IMHO,template=layout。模板(布局)包含单个视图(由控制器调用)实例。单个视图包含多个部分。顺便问一下,你对此有何看法:(见最后一个答案)。啊。看来我的问题没有直接的解决办法。将与您的保持一致!=)