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

use*_*081 0 ruby ruby-on-rails

在我的RoR 4.2应用程序中,所有页面都提供:标题,用于HTML标头<TITLE>标记.动态页面还提供:page_heading内容,它显示在我的应用程序页眉布局中.

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

这是展示视图的开始代码:

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

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

<h1> <%= yield(:page_heading.empty? ? :title : :page_heading) %> </h1>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

谢谢.

Pet*_*own 6

您可以使用content_for检查内容吗?

<h1>
  <% if content_for? :page_heading %>
    <%= yield :page_heading %>
  <% else %>
    <%= yield :title %>
  <% end %>
</h1>
Run Code Online (Sandbox Code Playgroud)

或简而言之:

<h1><%= yield(content_for?(:page_heading) ? :page_heading : :title) %></h1>
Run Code Online (Sandbox Code Playgroud)