Pregunta

Al final de una de mis acciones del controlador que necesito para redirigir a una página que sólo acepta peticiones PUT. He estado tratando de encontrar la manera de conseguir redirect_to utilizar una solicitud PUT pero sin ningún éxito.

¿Es esto posible? O hay otra manera de lograr esto?

¿Fue útil?

Solución 3

Ok, así que he encontrado una solución a mi problema. He encontrado una muy buena escritura sobre la situación aquí . 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 yo era capaz de una solicitud PUT 'falso' al hacer una solicitud posterior (usando redirect_post) y luego la asignación de 'poner' a un parámetro _method. Si nos fijamos en un put petición normal de todo, es un post de un formulario con un parámetro <=>. Así que es un poco hacker pero hace el trabajo.

Además, usted tiene que asegurarse de que cuando se llama a <=> los valores de su picadillo son cadenas de lo contrario serán arrojados errores.

Otros consejos

No creo que usted es capaz de hacer esto, y sospecho que la limitación es parte de HTTP en sí.

Al utilizar redirect_to -. La redirección sucede como "302 Moved" cabecera a menos que se especifique lo contrario en los parámetros

Tener un vistazo a la propia Spec HTTP no revela ninguna forma de cambiar el tipo de solicitud del navegador hace a través de redireccionamiento.

redirecciones HTTP :

  

Esta clase de código de estado indica   que otra acción debe ser tomada   por el agente de usuario con el fin de cumplir   la solicitud. La acción requerida MAYO   ser llevada a cabo por el agente de usuario   sin interacción con el usuario si   y sólo si el método utilizado en el   segunda petición es GET o HEAD.

Creo que es posible que necesite usar JavaScript para conseguir esta funcionalidad, o tal vez reconsiderar el flujo de control en su aplicación.

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 es así, entonces yo no sé cómo se hace eso.

Se puede redirigir a una página diferente que emite la solicitud de venta por parte del cliente, usando Javascript .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top