Я хочу зробити умовний візуалізацію на рівні макету на основі визначеного фактичного шаблону content_for(:an__area)
, будь-яка ідея, як це зробити?
Я хочу зробити умовний візуалізацію на рівні макету на основі визначеного фактичного шаблону content_for(:an__area)
, будь-яка ідея, як це зробити?
Відповіді:
насправді не потрібно створювати допоміжний метод:
<% if @content_for_sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
тоді, звичайно, на ваш погляд:
<% content_for :sidebar do %>
...
<% end %>
Я використовую це весь час, щоб умовно переходити від одного стовпця до двох стовпців
Може створити помічника:
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 %>
Добре, я збираюся безсоромно відповісти самостійно, оскільки ніхто не відповів, і я вже знайшов відповідь :) Визначте це як допоміжний метод або в 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
instance_variable_defined?(content_var_name)
трохи акуратніше, ніж замість того, щоб перевірити, чи є він нульовим. Другий більший момент - змінна екземпляра content_for застаріла, тому ваше рішення не є надійним у майбутньому