2009-03-21 10 views

Respuesta

2

Ok, entonces encontré una solución a mi problema. Encontré una muy buena redacción sobre la situación here. Mi aplicación es el siguiente:

private 
def redirect_post(redirect_post_params) 
    controller_name = redirect_post_params[:controller] 
    controller = "#{controller_name.camelize}Controller".constantize 
    # Throw out existing params and merge the stored ones 
    request.parameters.reject! { true } 
    request.parameters.merge!(redirect_post_params) 
    controller.process(request, response) 
    if response.redirected_to 
    @performed_redirect = true 
    else 
    @performed_render = true 
    end 
end 

Entonces me llamó a este método como este:

redirect_post :controller => 'registrations', :action => 'order', :_method => 'put', :authenticity_token => params[:authenticity_token] 

Así que era capaz de una solicitud PUT 'falso' al hacer una solicitud posterior (usando redirect_post) y luego asignando 'put' a un parámetro _method. Si nos fijamos en una solicitud normal put, todo es un post de un formulario con un parámetro _method. Así que es un poco hackish pero hace el trabajo bien.

Además, debe asegurarse de que cuando llame al redirect_post los valores de su hash sean cadenas, de lo contrario se generarán errores.

+1

'controller.process' ya no funciona en los rieles 4 – josal

1

Puede redireccionar a una página diferente que emita la solicitud de envío del cliente, using Javascript.

5

No creo que pueda hacer esto, y sospecho que la limitación es parte del propio HTTP.

Al utilizar redirigir a - la redirección ocurre como un encabezado "302 movido" a menos que se especifique lo contrario en los parámetros.

Si echamos un vistazo a la especificación HTTP en sí misma, no vemos ninguna forma de cambiar el tipo de solicitud que hace el navegador a través de la redirección.

HTTP Redirects:

Esta clase de código de estado indica que necesita más acciones que deben tomarse por el agente de usuario con el fin de cumplir con la solicitud . La acción requerida MAY se llevará a cabo por el agente de usuario sin interacción con el usuario si y solo si el método utilizado en la segunda petición es GET o HEAD.

Creo que es posible que necesite utilizar JavaScript para lograr esta funcionalidad, o tal vez repensar el flujo de control en su aplicación.

2

Si la acción es en el mismo controlador que cuando usted está tratando de redirigir a partir, simplemente llame a la acción y hacer que la plantilla de este modo:

def show 
    index 
    render :action => "index" 
end 

Si no lo es, entonces no sé Cómo lo haces.

Cuestiones relacionadas