2010-07-30 39 views
18

Creo que el código es más explícita opciónRender acción del controlador desde otro controlador

Una opción

class RedirectController < ApplicationController 
    def index 
    redirect_to :controller => 'posts', :action => 'show', :id => 1 
    # it works 
    end 
end 

B

class RedirectController < ApplicationController 
    def index 
    render :controller => 'posts', :action => 'show', :id => 1 
    # it doesn't work 
    end 
end 

es posible en (B) para cargar otra acción en otro ¿controlador? (y no solo la vista) ¿Cómo? Gracias

+0

¿Por qué querrías hacer esto? Sería mejor si nos diga el problema subyacente que está tratando de resolver. –

+0

El "problema subyacente" es que quiero tener la libertad de configurar algunas URL como lo desee sin tocar routes.rb – user142913

+3

Solo para aclarar, su Opción A no representa una acción de otro controlador, responde la solicitud actual con un redirigir que apunta el navegador al otro controlador (por lo tanto, da como resultado una segunda solicitud que golpea al otro controlador). 'render: template => 'posts/show'' sin embargo realmente renderiza la plantilla del otro controlador directamente. Por supuesto, necesita configurar cosas para la plantilla para mostrar (como su @post var). No estoy seguro de si entiendo lo que estás tratando de hacer, pero generalmente no puedes configurar las direcciones URL sin tocar routes.rb, ya que eso es para lo que routes.rb es bueno. – Zargony

Respuesta

35

Hola tratan render 'posts/show' o render :template => 'posts/show'

+0

Gracias funciona de las dos maneras, pero no es muy limpio porque tuve que agregar @post .. @post = Post.find 1 render 'mensajes/mostrar' – user142913

+0

render_component debe hacer el truco pero es obsoleto – user142913

+0

Esto funciona, pero no representa la plantilla del otro controlador alrededor de la plantilla de acción. ¿Hay alguna manera de forzar eso? – elsurudo

0

Sólo render la plantilla

def index 
    render 'posts/show' 
end 

Ésta también trabaja

def index 
    render template: 'posts/show' 
end 

Si desea procesar de alguna otra disposición

def index 
    render template: 'posts/show', layout: 'different_layout' 
end 
Cuestiones relacionadas