Rails 4 - 部分上的多个yield块

时间:2016-07-20 15:55:21

标签: ruby-on-rails ruby-on-rails-4

是否可以部分使用多个yield块?我想用它在我的项目中实现bootstrap模式框,有点像这样:

<div class="modal fade" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog modal-lg" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <%= yield :header %>
            </div>

            <div class="modal-body">
                <%= yield :body %>
            </div>

            <div class="modal-footer">
                <%= yield :footer %>
            </div>
        </div>
    </div>
</div>

这或多或少是我考虑使用它的方式

<%= render partial: "shared/modal" do %>
    <% content_for :header do %>
        ...        
    <% end %> %>

    <% content_for :body do %>
        ...        
    <% end %> %>

    <% content_for :footer do %>
        ...        
    <% end %> %>
<% end %>

有办法做到这一点吗?出于某种原因,这可能是一种糟糕的方法吗?

4 个答案:

答案 0 :(得分:6)

通过大量试验和错误,我认为我在Rails 5中解决了这个问题,但需要在我的部分中插入空白yield才能使其工作:

_partial.html.erb

<div class="partial">
  <%= yield %> <!--Does not do anything-->
  <div class="header">
    <%= yield :header %>
  </div>
  <div class="text">
    <%= yield :text %>
  </div>
</div>

实施为:

full_layout.html.erb

<%= render "partial" do %>
  <% content_for :header do %>
    <h1>Header content</h1>
  <% end %>
  <% content_for :text do %>
    <p>Text content</p>
  <% end %>
<% end %>

答案 1 :(得分:0)

在partial中使用多个yield块没有问题。唯一的办法就是确保实际需要很多。例如,content_for部分基本上是内容的占位符,可以根据应用程序的逻辑而变化。因此,在一个页面中使用多个产量是完全没问题的。

答案 2 :(得分:0)

我认为你的渲染部分存在问题。请注意,渲染部分块中包含所有content_for块。

<%= content_for :thing do %>
   Some content
<% end %>
<%= render partial: "blah" %>

答案 3 :(得分:0)

您也可以在没有输出的情况下直接在那里运行 put yield。这样你也可以使用默认块。

<div>
  <% yield %>
  <div class="mt-3">
    <div class="text-2xl tracking-wide font-bold text-gray-900">
      heading
      <%= yield :heading %>
    </div>
  </div>

  <div class="relative bg-white rounded-xl shadow-xl mb-8 min-h-28">
    <%= yield %>
  </div>
...