Representación parcial de la vista de un controlador a la vista de otro controlador en Rails

Tengo una vista para un controlador llamado “show”. Dentro de esa vista, quiero representar el contenido de la vista de otro controlador, y obviamente, la lógica del formulario en esa vista para hablar con el controlador al que pertenece también. ¿Cómo hago esto? Soy bastante nuevo en los Rails y todavía no estoy 100% seguro con el marco.

Casi se podrían considerar “widgets” en la vista. Sé que puede representar acciones desde el mismo controlador en la vista usando:

render :action => "show_home_page", :layout=> false 

pero lo necesito para representar la acción (ver) desde otro controlador.

es decir.

Tengo una vista, que se representa en un diseño. Esa vista pertenece al controlador A. Necesito representar las vistas “índice” y “nuevas” del controlador B dentro de la vista original (arriba)

.

La terminología en tu pregunta es un poco confusa. Si está en un controlador y desea ejecutar el código en otro método de acción en otro controlador y representar su plantilla, debe redirigir a esa acción. Digamos que el otro controlador se llama ContractsController

 redirect_to :controller => "contracts", :action => "show_home_page" 

Si solo desea usar la plantilla de vista de otro método como la respuesta de su acción, solo tiene que prefijar el nombre del controlador en el parámetro de procesamiento. Esto no llamará a la acción, solo usará su plantilla.

Por ejemplo, si la plantilla se encuentra en la carpeta del controlador de contratos.

 render :action => "/contracts/show_home_page", :layout=> false 

Creo que en este caso realmente estás hablando de un parcial, que se vería como

 render :partial => "/contracts/show_home_page" 

Sin embargo, lo que veo que entiendes aquí es que realmente quieres llamar a múltiples métodos de acción para renderizar una sola página. Asi no es como funciona esto. Tendrá que configurar los objetos a los que las plantillas harán referencia en una sola acción. Esta es una de las razones por las que la mayoría de los desarrolladores de Rails ponen una gran cantidad de código en los modelos, por lo que la configuración no se repite en todos los controladores.

Pero hay otra manera … donde entra la magia de JavaScript .

En tu página, crea una función como esta:

  

Si llama a eso en la carga incluso de su página, reemplazará el div por “categorías” de identificación con la respuesta de la acción a la que se hace referencia.

Si realmente desea representar otra acción por completo (es decir, simular una solicitud para pasar por toda la stack de Ruby on Rails), puede usar Webrat (consulte Webrat screencast aquí).

En las aplicaciones web tradicionales de MVC, rara vez debería tener la necesidad de hacer esto. Pero en mi experiencia en el desarrollo de aplicaciones web de microarchitecture y estilo SOFEA, esto se está haciendo cada vez más común.

No estoy seguro de entender completamente su statement del problema (por qué esto debe hacerse desde la vista), pero diría que simplemente llama a redirect_to desde el controlador A al controlador B.