Rails проверяет, соответствует ли yield: area в content_for

Я хочу сделать условный рендеринг на уровне макета на основе фактического шаблона, который определен content_for(:an__area), любая идея, как это сделать?

+83
11 окт. '08 в 8:09
источник поделиться
6 ответов

@content_for_whatever устарел. Вместо этого используйте content_for?, например:

<% if content_for?(:whatever) %>
  <div><%= yield(:whatever) %></div>
<% end %>
+192
11 мар. '10 в 22:05
источник

не нужно создавать вспомогательный метод:

<% if @content_for_sidebar %>
  <div id="sidebar">
    <%= yield :sidebar %>
  </div>
<% end %>

то, конечно, на ваш взгляд:

<% content_for :sidebar do %>
  ...
<% end %>

Я все время использую это для условного перехода между одним столбцом и двумя макетами столбцов

+10
11 мар. '09 в 20:36
источник
<%if content_for?(:content)%>
  <%= yield(:content) %>
<%end%>
+2
18 февр. '14 в 16:49
источник

Может создать помощника:

def content_defined?(var)
  content_var_name="@content_for_#{var}"    
  !instance_variable_get(content_var_name).nil?
end

И используйте это в своем макете:

<% if content_defined?(:an__area) %>
  <h1>An area is defined: <%= yield :an__area %></h1>
<% end %>
+2
11 мар. '09 в 20:28
источник

Я не уверен в производительности, связанной с вызовом доходности дважды, но это будет делать независимо от внутренней реализации yield (@content_for_xyz устарел) и без каких-либо дополнительных методов кода или помощника:

<% if yield :sidebar %>
  <div id="sidebar">
    <%= yield :sidebar %>
  </div>
<% end %>
+1
16 нояб. '09 в 12:01
источник

Хорошо, я буду бессовестно отвечать на себя, поскольку никто не ответил, и я уже нашел ответ:) Определите это как вспомогательный метод либо в application_helper.rb, либо в любом месте, где вы нашли удобный.

  def content_defined?(symbol)
    content_var_name="@content_for_" + 
      if symbol.kind_of? Symbol 
        symbol.to_s
      elsif symbol.kind_of? String
        symbol
      else
        raise "Parameter symbol must be string or symbol"
      end

    !instance_variable_get(content_var_name).nil?

  end
+1
11 окт. '08 в 16:01
источник

Посмотрите другие вопросы по меткам или Задайте вопрос