with rails from different application ruby-on-rails layout yield

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%>