Rails:如何检查是否提供了content_for?

时间:2015-03-21 15:12:18

标签: ruby-on-rails ruby

在我的RoR 4.2应用程序中,所有页面都提供了HTML标题<TITLE>标记中使用的:title 。 动态页面还提供:page_heading 内容,该内容显示在我的应用程序标题布局中。

为了保持一致的外观,我希望标题也显示在静态页面的应用程序页眉布局中,即未提供:page_heading 时。

以下是展示视图的开头代码:

<% provide(:title, 'Managing business rules') %>
<% content_for :page_heading do %>
<h1>Business Rule: <%= @business_rule.name %></h1>
<% end %>
----

以下是_header.html.erb应用程序布局中嵌入的代码:

<h1> <%= yield(:page_heading.empty? ? :title : :page_heading) %> </h1>

因此,对于静态页面:标题显示在IceWeasel标题栏中,也显示在应用程序标题中,这是正确的。

但是,对于动态页面:标题显示在IceWeasel标题栏中,也显示在应用程序标题中,其中:page_heading是预期的。

符号:page_heading.empty?上的条件不起作用。

如何正确指定此条件并将期望符号提供给yield函数?

感谢。

2 个答案:

答案 0 :(得分:6)

您可以使用content_for?

检查内容
<h1>
  <% if content_for? :page_heading %>
    <%= yield :page_heading %>
  <% else %>
    <%= yield :title %>
  <% end %>
</h1>

或简称:

<h1><%= yield(content_for?(:page_heading) ? :page_heading : :title) %></h1>

答案 1 :(得分:2)

@Beerlington的回答是对的,我只是添加另一个选项来干掉代码。

<h1>
  <%= yield(content_for?(:page_heading)? :page_heading : :title) %>
</h1>