Rails - Как я могу определить, был ли предоставлен контент content_for? - PullRequest
4 голосов
/ 25 апреля 2010

Я хочу определить, было ли предоставлено содержимое для тега content_for в моем шаблоне, и если нет, вернуться к значению по умолчанию:

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

Есть ли простой способ обнаружить это? Я пытался <% if :title -%>, но это мало что дало. спасибо.

Ответы [ 5 ]

3 голосов
/ 25 апреля 2010

Вы можете оптимизировать код дальше:

def content_exists?(name)
  return instance_variable_get("@content_for_#{name}")
end
2 голосов
/ 13 декабря 2011

В старых Rails 2.1.1,

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

работает на меня.

2 голосов
/ 25 апреля 2010

Попробуйте это:

<title>
  <%= yield :title || "404 - Page Unknown" -%>
</title>
1 голос
/ 26 апреля 2010

Еще один способ

'common / top_status')%>
1 голос
/ 25 апреля 2010

Немного покопавшись в коде 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).

...