Rails - 如何检测是否提供了content_for内容?

时间:2010-04-25 08:07:38

标签: ruby-on-rails templates erb

我想检测我的模板中是否为content_for标记提供了内容,如果没有回退到默认值:

<title>
  <% if content_is_provided -%>
    <%= yield :title -%>
  <% else -%>
    404 - Page Unknown
  <% end -%>
</title>

任何简单的方法来检测这个?我试过了<% if :title -%>,但这并没有做太多。感谢。

5 个答案:

答案 0 :(得分:3)

您可以进一步简化代码:

def content_exists?(name)
  return instance_variable_get("@content_for_#{name}")
end

答案 1 :(得分:2)

试试这个:

<title>
  <%= yield :title || "404 - Page Unknown" -%>
</title>

答案 2 :(得分:2)

在旧的Rails 2.1.1中,

<%= (yield :title) || default_title %>

正在为我工​​作。

答案 3 :(得分:1)

在挖掘了content_for代码之后,我通过创建一个帮助方法找到了一个有效的解决方案:

def content_exists?(name)
  return true if instance_variable_get("@content_for_#{name}")
  return false # I like to be explicit :)
end

并在视图中:

<% if content_exists?(:title)-%>
  <%= yield :title %>
<% else -%>
  404 - Page Unknown
<% end -%>

目前这似乎有效(Rails 2.3.5)。

答案 4 :(得分:1)

另一种方式

 'common / top_status')%&gt;