ruby-on-rails - 渲染具有多个 block 的部分/布局

标签 ruby-on-rails ruby-on-rails-4 layout view partial

我有一个非常简单的要求 - 我有一个包含标题和正文的布局。它是页面的子布局,而不是页面本身。

这种布局在多个页面中重复出现,它周围的结构可能会发生变化。所以我希望能够将标题的内容和正文的内容与包含它的结构分开。

我的第一次尝试是使用渲染部分作为布局,使用命名产量来渲染标题和正文:

<header class="Resource-header">
  <%= yield :resource_header %>
</header>
<div class="Resource-body">
  <%= yield :resource_body %>
</div>

然后从我的模板中渲染它,如下所示:
<%= render layout: 'admin/resource' do %>

  <% content_for :resource_header do %>
  <% end %>

  <% content_for :resource_body do %>
  <% end %>

<% end %>

但是,这没有任何效果。

我开始玩弄事物的顺序,并发现如果在调用部分之前声明了 content_for 块,这种方法确实有效:
<% content_for :resource_header do %>
<% end %>

<% content_for :resource_body do %>
<% end %>

<%= render layout: 'admin/resource' do %><% end %>

然而,这只是让人感到难以置信的 hacky。好像content_for是全局作用域的,content_for块和局部渲染之间没有关联。

那么我实现这一目标的正确方法是什么?

最佳答案

我只是碰巧有完全相同的问题。

解决办法是:
在您的部分布局文件 'admin/resource' 正文中:

<header class="Resource-header">
  <%= yield resource, :resource_header %>
</header>
<div class="Resource-body">
  <%= yield resource, :resource_body %>
</div>

在你的模板中做:
<%= render layout: 'admin/resource' do |resource, section| %>
  <% case section %>
    <% when :resource_header %>
      Resource header shows here.
    <% when :resource_body %>
      Resource body shows here.
  <% end %>

<% end %>

关于ruby-on-rails - 渲染具有多个 block 的部分/布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27090607/

相关文章:

ruby-on-rails - 使用 Google-Maps-for-Rails 添加标记

ruby-on-rails - 从 Heroku 运行应用程序

ruby-on-rails - PG::DatatypeMismatch: 错误:列 "score"是整数类型,但表达式是文本类型

ruby-on-rails - Ubuntu 64位上的Rails?

ruby-on-rails - Paperclip-ffmpeg 在heroku上不起作用

ruby-on-rails - 我的测试正在通过。但是,未定义的方法 `reviews' 为 nil :NilClass when calling the page

ruby-on-rails - 在Elasticsearch中将条件运算符与构面混合

android - 如何在 Android 中包含两次布局?

Android - 如何使 UI 在不同设备上看起来相同?

android - 在 android 布局编辑器中,当我单击任何 View 时,属性 View 不会更新