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.
'controller.process' ya no funciona en los rieles 4 – josal