Problema en render_component , layout => false

Hola como estan.

tengo un problema al hacer un render component, el problema que tengo es
que
al mostrar el componente, este aparece con todo el layout.

<%= render_component :controller => “cursos”, :action => “calendarios”,
:id
=> @curso.id, :layout => nil %>

he intentado quitar el layout de la vista embebida para que no aparesca
con
un menu y un pie cuando se la llama.

he probado estas dos formas y nada

<%= render_component :controller => “cursos”, :action => “calendarios”,
:id
=> @curso.id, :layout => nil %>
<%= render_component :controller => “cursos”, :action => “calendarios”,
:id
=> @curso.id, :layout => false %>

a alguin le ha sucedido algo similar???

saludos

El problema es que el layout no lo decide la vista que invoca a
render_component, sino la accion invocada.

Es decir, en la vista “padre” usas <%= render_component :controller
=> …, :action => …, :id => … %>
Mientras que en CursosController.calendarios, usas render :action =>
“calendarios”, :layout => false

On 23/09/2007, Miguel M. [email protected] wrote:

<%= render_component :controller => “cursos”, :action => “calendarios”, :id
=> @curso.id, :layout => nil %>
<%= render_component :controller => “cursos”, :action => “calendarios”, :id
=> @curso.id, :layout => false %>

a alguin le ha sucedido algo similar???

No tengo experiencia con render_component, pero diría que simplemente
delega en el render del controlador y la acción especificada. Es
decir, mira en /cursos/calendarios y comprueba allí que estás haciendo
un render de plantilla sin layout


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

Al margen del problema que tienes, los componentes están totalmente
desaconsejados.

Deberías usar partials y helpers en su lugar.

Sin animo de empezar una discusion de nunca acabar, no hagas caso de
la gente que dice que los componentes estan desaconsejados. En muchas
situaciones son la mejor solucion, en especial cuando lo que buscas
es encapsular pequeñas partes de tu aplicacion, sin estar intentando
proveer mecanismos de reuso de gran alcance (es decir, para un
calendario que esta en todas las paginas, pero no para hacer un
“componente de foros” que uses en varias aplicaciones)

El “mito” de que los componentes no son buenos tiene mucho que ver
con un post de DHH donde hablaba pestes de los componentes como
mecanismo de reuso entre aplicaciones, pero en general se referia al
subdirectorio “components” y no al simple “render_component”.

Me da mucha risa ver como la gente intenta resolver problemas
“componentizables” usando parciales, helpers y filtros, que lo que
hacen es dividir el problema en fragmentos separados mas dificiles de
entender e incluso menos eficientes. Simplemente porque un dia DHH
dijo que los componentes eran malos.

Usa los componentes con confianza

Hola a todos, Gracias por las respuestas , pero no entendi que es lo que
tengo que hacer para solucionar el problema

Sebastian escribió:
El problema es que el layout no lo decide la vista que invoca a
render_component, sino la accion invocada.
Es decir, en la vista “padre” usas <%= render_component :controller =>
…,
:action => …, :id => … %>
Mientras que en CursosController.calendarios, usas render :action =>
“calendarios”, :layout => false

quiere decir que tengo que poner

CursosController …

def show
render :action => “calendarios”, :layout => false
end

y en la vista poner <%= render_component :controller => …, :action =>
…, :id => … %>

?¿?
me confundio un poco la solucion. bueno de todas formas lo solucioné
quitando el layout desde el controlador con un except, aunque creo que
no es
la solucion correcta, para este caso sirve.

layout ‘admin’ , :except => [:calendarios, :temarios]

Gracias por la ayuda

Hola Sebastian, Gracias por la ayuda
Ahora funciona correctamente.

Pero en el caso donde accedo directamente a la vista
calendarios.rhtmldesde mi navegador me aparece sin el layout. Entiendo
porque sucede esto,
por eso buscaba la forma de bloquear el layout solo en la llamada de
render_component desde otro vista.

si no es como si hiciera esto

layout ‘admin’ , :except => [:calendarios, :temarios]

hay alguna forma lograr que la vista calendarios.rhtml aparesca con su
layout si es que no es embebida con render_component.

Bueno Gracias pr la ayuda

Saludos

si en tu vista haces algo como:

render_component :controller => “blah”, :action => “calendario”, :id
=> “1”, :sin_layout => true

entonces en la accion puedes hacer:

if params[:sin_layout]
render …, :layout => false
else
render …
end

Las llamadas directas no tienen el parametro asi que usan el layout
definido globalmente, mientras que la llamada de render_component
pasa el parametro apropiado y es generada sin layout

On Sep 23, 2007, at 3:42 PM, “Miguel M.”
<[email protected]

wrote:

“calendarios”, :layout => false

y en la vista poner <%= render_component :controller
=> …, :action => …, :id => … %>

Exactamente. El :layout va en la accion. En el render_component de la
vista inicial no colocas nada (digo, nada adicional a la accion y sus
parametros)

Muchas Gracias Sebastían.

ahora todo funciona correctamente.
gracias por la ayuda

Saludos