Könnte jemand params
in Rails Controller erklären : Woher sie kommen und worauf sie sich beziehen?
def create
@vote = Vote.new(params[:vote])
item = params[:vote][:item_id]
uid = params[:vote][:user_id]
@extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])
last_vote_time = @extant.created_at unless @extant.blank?
curr_time = Time.now
end
Ich möchte diesen Code Zeile für Zeile lesen und verstehen können, was los ist.
ruby-on-rails
ruby
Dru
quelle
quelle
Antworten:
Die Parameter stammen aus dem Browser des Benutzers, wenn er die Seite anfordert. Bei einer HTTP-GET-Anforderung, die am häufigsten vorkommt, werden die Parameter in der URL codiert. Zum Beispiel, wenn der Browser eines Benutzers dies anfordert
http://www.example.com/?foo=1&boo=octopus
dann
params[:foo]
wäre "1" undparams[:boo]
wäre "Krake".In HTTP / HTML sind die Parameter eigentlich nur eine Reihe von Schlüssel-Wert-Paaren, bei denen der Schlüssel und der Wert Zeichenfolgen sind. Ruby on Rails hat jedoch eine spezielle Syntax, um die Parameter zu einem Hash mit darin enthaltenen Hashes zu machen. Zum Beispiel, wenn der Browser des Benutzers dies anfordert
http://www.example.com/?vote[item_id‹=1&vote[user_id‹=2
dann
params[:vote]
wäre ein Hash,params[:vote][:item_id]
wäre "1" undparams[:vote][:user_id]
wäre "2".Die Ruby on Rails-Parameter entsprechen dem Array $ _REQUEST in PHP .
quelle
params
Hash enthalten. Cookie-Daten sind imsession
Hash enthalten.Wie andere bereits betont haben, können
params
Werte aus der Abfragezeichenfolge einer GET-Anforderung oder den Formulardaten einer POST-Anforderung stammen, aber es gibt auch einen dritten Ort, von dem sie stammen können: den Pfad der URL.Wie Sie vielleicht wissen, verwendet Rails sogenannte Routen, um Anforderungen an die entsprechenden Controller-Aktionen weiterzuleiten. Diese Routen können Segmente enthalten, die aus der URL extrahiert und in diese eingefügt werden
params
. Wenn Sie beispielsweise eine Route wie diese haben:Dann wird eine Anfrage an eine URL wie
http://example.com/products/42
gesetztparams[:id]
zu42
.quelle
Params enthält die folgenden drei Gruppen von Parametern:
match '/user/:id'
in route.rb setzt params [: id]params[:controller]
undparams[:action]
ist immer verfügbar und enthält den aktuellen Controller und die aktuelle Aktionquelle
User supplied parameters
etwas mehr erweitern? Ein Beispiel für den Parameter-Hash im UsersController wäre beispielsweise hilfreich. In Ihrem Beispiel klingt es so, als würde der Hash ungefähr so aussehen:{first_name: "mike", user: {first_name: "mike"} ...}
Ist das richtig?{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "action"=>"update", "controller"=>"apples", "id"=>"4"}
. Vergib mir, wenn ich falsch liege, ich bin ein Rails-Anfänger. Laut Ihrer Notiz sollte ich sehen:{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "apple" => {"ripe"=>"true"}, "action"=>"update", "controller"=>"apples", "id"=>"4"}
Ich weiß nicht, ob das mit starken Parametern in Rails4 zu tun hat oder nicht.Grundsätzlich sind Parameter benutzerdefinierte Daten für die Schienenanwendung.
Wenn Sie ein Formular veröffentlichen, erfolgt dies im Allgemeinen mit einer POST-Anforderung im Gegensatz zur GET-Anforderung. Sie können normale Rails-Anforderungen als GET-Anforderungen betrachten, wenn Sie die Site durchsuchen, wenn dies hilfreich ist.
Wenn Sie ein Formular senden, wird das Steuerelement an die Anwendung zurückgegeben. Wie erhalten Sie die Werte, die Sie an das Formular gesendet haben?
params
ich zeige.Über Ihren Code.
@vote = Vote.new params[:vote]
Erstellt eine neue Abstimmung zur Datenbank unter Verwendung der Daten von Parametern [: Abstimmung]. Wenn Ihr übermittelter Formularbenutzer unter dem Namen "Vote" benannt wurde, befinden sich alle Daten in diesem Feld: Vote des Hashs.Die nächsten beiden Zeilen werden verwendet, um das Element abzurufen, und der Benutzer der UID hat das Formular gesendet.
findet die neueste oder zuletzt eingefügte Abstimmung aus der Datenbank mit den Bedingungen item_id = item und user_id = uid.
Die nächsten Zeilen benötigen die letzte Abstimmungszeit und die aktuelle Zeit.
quelle
Auf der Rails-Seite
params
befindet sich eine Methode, die einActionController::Parameters
Objekt zurückgibt . Siehe https://stackoverflow.com/a/44070358/5462485quelle
params
eine Methode ist. Ruby kann es schwierig machen, Variablen von Methoden zu unterscheiden