Frage

Am Ende einer meiner Controller-Aktionen muß ich auf eine Seite umgeleitet, die nur PUT-Anfragen akzeptiert. Ich habe versucht, herauszufinden, wie redirect_to zu bekommen eine Put-Anfrage zu verwenden, aber ohne Erfolg.

Ist das möglich? Oder gibt es eine andere Möglichkeit, dies zu erreichen?

War es hilfreich?

Lösung 3

Ok, so fand ich eine Lösung für mein Problem. Ich fand eine sehr gute aufzuschreiben auf die Situation hier . Meine Implementierung sieht wie folgt aus:

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

Dann rief ich diese Methode wie folgt aus:

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

So konnte ich ‚fake‘ Put-Anforderung durch einen Post-Anforderung machen (mit redirect_post) und dann der Zuordnung ‚setzen‘, einen _method param. Wenn Sie an einem normalen put Anfrage schauen alle ist es ein post aus einem Formular mit einem _method param. So ist es ein wenig hackish aber es wird die Arbeit erledigt.

Außerdem müssen Sie sicherstellen, dass, wenn Sie redirect_post die Werte Ihrer Hash nennen Strings sind sonst Fehler geworfen werden.

Andere Tipps

Ich glaube nicht, Sie sind in der Lage, dies zu tun, und ich vermute, dass die Begrenzung Teil von HTTP selbst.

Bei der Verwendung von redirect_to -. Die Umleitung geschieht als "302 Moved" Header, wenn nicht anders in den Parametern angegeben

einen Blick auf dem HTTP-Spec Nachdem sie offenbart keine Möglichkeit, die Art der Anforderung zu ändern, der Browser über Umleitung macht.

HTTP Redirects :

  

Diese Klasse von Statuscode angibt   dass weitere Maßnahmen getroffen werden   durch den User-Agent zu erfüllen, um   die Anfrage. Die Aktion erforderlich MAY   werden durch den User-Agent durchgeführt   ohne Wechselwirkung mit dem Benutzer, wenn   und nur dann, wenn das Verfahren in dem verwendeten   zweite Anforderung ist GET oder HEAD.

Ich glaube, Sie müssen JavaScript verwenden, um diese Funktionalität zu erreichen, oder vielleicht den Ablauf der Steuerung in Ihrer Anwendung überdenken.

Wenn die Aktion in der gleichen Controller wie, wo Sie versuchen, von umleiten, einfach die Aktion aufrufen und die Vorlage machen etwa so:

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

Wenn es nicht ist, dann weiß ich nicht, wie Sie das tun.

Sie können auf eine andere Seite umgeleitet, die die Put-Anforderung von dem Client ausstellt, mit Javascript .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top