Ok, quindi ho trovato una soluzione al mio problema. Ho trovato un'ottima recensione sulla situazione here. La mia applicazione si presenta così:
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
Poi ho chiamato questo metodo come questo:
redirect_post :controller => 'registrations', :action => 'order', :_method => 'put', :authenticity_token => params[:authenticity_token]
quindi ero in grado di 'falso' una richiesta put facendo una richiesta POST (utilizzando redirect_post
) e poi assegnare 'put' ad un parametro _method
. Se si osserva una richiesta normale di put
, si tratta di un valore post
da un modulo con un parametro _method
. Quindi è un po 'hacker ma fa il lavoro.
Inoltre, è necessario assicurarsi che quando si chiama redirect_post
i valori del proprio hash siano stringhe altrimenti verranno generati errori.
'controller.process' non funziona più nei binari 4 – josal