Angenommen, Sie haben eine URL
%Vor%und in der Anfrage haben Sie auch einen Post-Parameter
%Vor%Was würde
? params[:a]
in diesem Fall? hängt es vom HTTP-Verb ab?
Wenn es vom HTTP-Verb abhängt,
Was ist, wenn Ihr Formular aussieht wie
? %Vor% Was wäre params[:a]
in diesem Fall?
AKTUALISIEREN
Also habe ich nur ein kleines Experiment gemacht und den Chrome Debugger benutzt, um ?authenticity_token=abc
an die Action-URL anzuhängen. Ich schaute auf das Serverprotokoll und ich sah, dass Parameter authenticity_token => 'abc'
hat. Ich glaube auch, dass die Methode in diesem Fall POST
ist.
Lass mich wissen, was ihr euch ausgedacht habt.
Wenn ich dies in einem Beispielcode versuchte, konnte ich sehen, dass die Abfrageparameter (GET) Vorrang vor dem POST-Text hatten. Also ging ich in den Code von Rack
, der die HTTP-Anfragen in Rails behandelt. Hier ist der Code von request.rb
Hier die Methode
Entsprechend dem Code für params
sollten die GET-Parameter bei identischen Schlüsseln durch POST-Parameter überschrieben werden. (%Code%). Aber das ist im Gegensatz zu dem, was ich bekam, als ich es praktisch versuchte.
Die einzige Möglichkeit ist, dass dieser Code von Rails überschrieben wird. Als ich darüber nachdachte, machte es Sinn, da der self.GET.merge(self.POST)
Hash von den Rails immer params
und "controller"
Schlüssel enthält, die im Falle von Rack nicht vorhanden sind. Also habe ich mir auch den Code von Rails angeschaut und festgestellt, dass die "action"
-Methode tatsächlich außer Kraft gesetzt wurde. Werfen Sie einen Blick auf request.rb und parameters.rb im Rails-Quellcode. In parameter.rb haben wir:
und in request.rb :
%Vor%Also, hier
params
(Es wurde hier außer Kraft gesetzt) Beachten Sie, dass die GET-Methode und die POST-Methode ebenfalls außer Kraft gesetzt wurden, hauptsächlich um den Hash zu konvertieren, der an ein Objekt von HashWithIndifferentAccess zurückgegeben wurde.
Betrachtet man also den Code hier ( params
), wird deutlich, dass POST-Parameter bei identischen Schlüsseln in Rails durch GET-Parameter überschrieben werden. Oder anders ausgedrückt: GET-Parameter haben Vorrang vor POST-Parametern.
Rails verwendet Rack::Request
für HTTP-Anfragen. Allerdings wird die Methode Rack
params
in ActionDispatch::Http::Parameters
neu definiert. (über einen Alias).
Diese Methode params
, die eine Anfrage zurückgibt Parameter, wird implementiert als:
Beachten Sie die Methode aliased parameters
.
Sofern nicht anders definiert, überschreiben Parameter aus der Abfragezeichenfolge Parameter aus dem POST-Hauptteil.
Es wäre 2. Aber für das Routing würde es mit der '1' übereinstimmen.
Wenn Sie möchten, können Sie request.GET und request.POST verwenden, um auf die Variablen get und post zuzugreifen.
Tags und Links ruby-on-rails-3 ruby-on-rails