2009-11-20 24 views
13

que tienen una visión para un controlador llamado "espectáculo". 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 rieles y todavía no estoy 100% seguro con el marco.Rendering Parciales En Ver un controlador de Vista a otro controlador de rieles en

Casi se podría considerarlos como "widgets" en la vista. Sé que usted puede hacer que las acciones de un mismo controlador en la vista mediante:

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

pero necesito que acabe con la acción (ver) de otro controlador.

es decir.

Tengo una vista, que es representada en un diseño. Ese punto de vista, pertenece al controlador A. Necesito hacer que el "índice" y "nuevos" vistas desde el controlador B dentro de la vista original (arriba)

.

+0

cita: "Soy bastante nuevo en los rieles y todavía no estoy 100% seguro con el marco." - No soy nuevo en los rieles, pero cuando alguna vez creo que entendí algo, entonces estoy equivocado, hay una mejor solución o una nueva versión de rieles ;-) – halfbit

Respuesta

34

La terminología en su la 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 renderizar su plantilla, debe redireccionar_ a esa acción. Digamos que el otro controlador se llama ContractsController

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

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

Por ejemplo, si la plantilla vive en la carpeta para el controlador de contratos.

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

creo que en este caso, en realidad se está hablando de un parcial, que se vería como

render :partial => "/contracts/show_home_page" 

Sin embargo, lo que veo que se aferra a aquí es que en realidad se desea llamar múltiple 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 razón por la cual la mayoría de los desarrolladores de Rails ponen mucho código en los modelos, por lo que la configuración no se repite en todos los controladores.

Pero hay otra manera ... donde la magia de JavaScript viene en

En su página, crear una función como esta:.

<script type="text/javascript" language="javascript">  
function load_categories() { 
      <%= remote_function(:url => {:controller => "categories", :action => "list"}, 
            :update => "categories")%> 
     }; 
</script> 

Si llama que, en la carga incluso de su página, reemplazará el div con id "categorías" con la respuesta de la acción referenciada.

+1

una respuesta tan asombrosamente minuciosa. Voy a digerir esto por un tiempo y te llamaré. En última instancia, mi esperanza era crear un conjunto de parciales tipo "artilugios", que pudiera incluir en cualquier vista que quisiera. El método javascript es algo que ni siquiera había considerado. – Ash

+0

desafortunadamente la función remote_function ya no funciona ya que el prototipo de helper se eliminó en rails 3.1 vemos que necesitamos soluciones como [this] (http://stackoverflow.com/questions/13116243/error-undefined-method-remote-function-how-to -make-ajax-calls-with-rails-3-us) – msanjay

-1

no estoy seguro de entender el enunciado del problema completamente (¿por qué esto debe hacerse de la vista), pero yo diría que acaba de llamar redirect_to del controlador A al controlador B.

+0

bien, entonces tengo una vista, que se representa en un diseño. Ese punto de vista pertenece al controlador A. que necesito para hacer que el "índice" y "nuevas" vistas desde el controlador B sobre esa página. – Ash

0

Si realmente desea representar completamente otra acción (es decir, simular una solicitud para pasar por la pila completa de Ruby on Rails), puede usar Webrat (marque Webrat screencast aquí).

En las aplicaciones web tradicionales MVC, debe rara vez tienen la necesidad de hacer esto. Pero en mi experiencia desarrollando SOFEA-style y micro-architecture webapps, esto se está volviendo más y más común.

Cuestiones relacionadas