уступите, если содержание, представьте что-то иначе (направляющие 3)

Я был вдали от направляющих некоторое время теперь, поэтому возможно, я пропускаю что-то простое.

Как может Вы выполнять это:

<%= yield_or :sidebar do %>
  some default content
<% end %>

Или даже:

<%= yield_or_render :sidebar, 'path/to/default/sidebar' %>

В первом случае я пробую:

def yield_or(content, &block)
  content_for?(content) ? yield(content) : yield
end

Но это не бросает 'блок, данный' ошибка.

Во втором случае:

def yield_or_render(content, template)
  content_for?(content) ? yield(content) : render(template)
end

Это работает, когда нет никакого определенного содержания, но как только я использую content_for для переопределения содержания по умолчанию, он бросает ту же ошибку.

Я использовал это в качестве начальной точки, но кажется, что это только работает при прямом использовании в представлении.

Спасибо!

11
задан Community 23 May 2017 в 12:02
поделиться

2 ответа

Как насчет чего-то подобного?

<% if content_for?(:whatever) %>
  <div><%= yield(:whatever) %></div>
<% else %>
  <div>default_content_here</div>
<% end %>

Вдохновение от этого вопроса SO

14
ответ дан 3 December 2019 в 06:19
поделиться

Я не знал, что вы можете использовать content_for(:content_tag) без блока, и он будет возвращать то же содержимое, как если бы он использовал yield(:content_tag).

Итак:

def yield_or_render(content, template)
  content_for?(content) ? content_for(content) : render(template)
end
0
ответ дан 3 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: