4

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

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

有什么简单的方法可以检测到这一点吗?我试过<% if :title -%>了,但效果不大。谢谢。

4

5 回答 5

3

您可以进一步简化代码:

def content_exists?(name)
  return instance_variable_get("@content_for_#{name}")
end
于 2010-04-25T10:01:29.143 回答
2

试试这个:

<title>
  <%= yield :title || "404 - Page Unknown" -%>
</title>
于 2010-04-25T08:37:22.433 回答
2

在旧的 Rails 2.1.1 中,

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

正在为我工​​作。

于 2011-12-13T15:57:00.563 回答
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)。

于 2010-04-25T08:46:28.440 回答
1

另一种方式

'common/top_status') %>
于 2010-04-25T21:23:18.793 回答