ruby-on-rails - from - render json rails
Los rieles comprueban si el rendimiento: el área está definida en content_for (6)
De acuerdo, me voy a contestar sin vergüenza ya que nadie ha respondido y ya encontré la respuesta :) Defina esto como un método de ayuda en application_helper.rb o en cualquier lugar que considere conveniente.
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
Quiero hacer un renderizado condicional en el nivel de diseño basado en la plantilla real que ha definido content_for(:an__area)
, ¿alguna idea de cómo hacer esto?
No estoy seguro de las implicaciones de rendimiento de llamar al rendimiento dos veces, pero esto será independientemente de la implementación interna del rendimiento (@content_for_xyz está en desuso) y sin ningún código adicional o métodos de ayuda:
<% if yield :sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
Puede crear un ayudante:
def content_defined?(var)
content_var_name="@content_for_#{var}"
!instance_variable_get(content_var_name).nil?
end
Y usa esto en tu diseño:
<% if content_defined?(:an__area) %>
<h1>An area is defined: <%= yield :an__area %></h1>
<% end %>
no es realmente necesario para crear un método de ayuda:
<% if @content_for_sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
entonces, por supuesto, en su opinión:
<% content_for :sidebar do %>
...
<% end %>
Utilizo esto todo el tiempo para ir condicionalmente entre un diseño de una columna y dos columnas
@content_for_whatever
está en desuso. Use content_for?
en cambio, así:
<% if content_for?(:whatever) %>
<div><%= yield(:whatever) %></div>
<% end %>
<%if content_for?(:content)%>
<%= yield(:content) %>
<%end%>