with render_to_string rails from ejemplos ruby-on-rails-3 erb

ruby-on-rails-3 - render_to_string - render rails



Los rieles 3 representan la acción de otro controlador (4)

Necesito renderizar otra acción de controlador <%= render "controller/index" %> y obtengo este error

Falta un controlador / índice parcial con {: formats => [: html],: locale => [: en,: en],: handlers => [: rjs,: rhtml,: rxml,: erb,: builder]} en ver rutas "/ ruta_a / aplicación / vistas"

¿Cómo puedo renderizar otra acción de controlador en una vista pero sin enviar una redirección al cliente? He intentado

<%=render :action => "index", :controller=>"controller" %>

pero parece que no está funcionando.


Desde la page Rails Guides:

Usar render con: acción es una fuente frecuente de confusión para los recién llegados de Rails. La acción especificada se usa para determinar qué vista mostrar, pero Rails no ejecuta ninguno de los códigos para esa acción en el controlador. Cualquier variable de instancia que requiera en la vista debe configurarse en la acción actual antes de llamar a renderizar.

En resumen, no puede representar otra acción, solo puede representar otra plantilla. Puede obtener el código compartido y moverlo a un método en el controlador de la aplicación. También podría intentar algo en esta línea si realmente no puede estructurar su código de alguna otra manera:

# This is a hack, I''m not even sure that it will work and it will probably # mess up your filters (like ignore them). other_controller = OtherController.new other_controller.request = @_request other_controller.some_action


Esto funciona bien para mi :

def renderActionInOtherController(controller,action,params) controller.class_eval{ def params=(params); @params = params end def params; @params end } c = controller.new c.request = @_request c.response = @_response c.params = params c.send(action) c.response.body end

luego, llamar por

render :text => renderActionInOtherController(OtherController,:otherAction,params)

básicamente piratea la otra clase y sobrescribe su método "params" y regresa

Si está utilizando Rails 4:

def renderActionInOtherController(controller,action,params) c = controller.new c.params = params c.dispatch(action, request) c.response.body end


Intenta renderizar la plantilla:

<%= render :template => "controller/index" %>

O archivo:

<%= render :template => "#{Rails.root}/app/controllers/controller/index" %>

Y creo que debes renderizarlo a través del controlador, en la medida en que sea más conveniente:

def your_action ... render :action => :index end


Si no desea simplemente renderizar la view del otro controlador (/ modelo), sino que llama a la action (método), piense más en la forma de vida de ruby: coloque este (s) método (es) en un module e inclúyalo en los controladores. lo necesita.

Creo que es menos ''espeluznante'' que tocar de algún modo a otro controlador.

module StandardActions def show_user_homepage(local_params=params) #something finding #something to check render :"homepage/show" def end class AddressesController < ApplicationController include StandardActions def update # update address if ok show_user_homepage(id: user_id) else #errorthings render :edit #(eg.) end end end class HobbiesController < ApplicationController include StandardActions def update # update hobby if ok show_user_homepage(id: user_id) else #errorthings render :edit #(eg.) end end end