Könnte jemand params
in Rails controller: 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 in der Lage sein, diesen Code Zeile für Zeile zu lesen und zu verstehen, was los ist.
Die Parameter kommen vom 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 verlangt
http://www.example.com/?foo=1&boo=octopus
dann params[:foo]
wäre "1" und params[: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, aber Ruby on Rails a Spezielle Syntax, um die Parameter als Hash mit Hashes zu definieren, 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" und params[:vote][:user_id]
wäre "2".
Die Parameter Ruby on Rails) entsprechen dem Array $ _ REQUEST in PHP .
Wie bereits erwähnt, können params
Werte aus der Abfragezeichenfolge einer GET-Anforderung oder den Formulardaten einer POST) - Anforderung stammen, es gibt jedoch auch einen dritten Platz Herkunft: Der Pfad der URL.
Wie Sie vielleicht wissen, verwendet Rails Routen, um Anforderungen an die entsprechenden Controller-Aktionen zu leiten. Diese Routen können Segmente enthalten, die aus der URL extrahiert und in params
eingefügt werden Beispiel, wenn Sie eine Route wie diese haben:
match 'products/:id', ...
Dann eine Anfrage an eine URL wie http://example.com/products/42
setzt params[:id]
bis 42
.
Params enthält die folgenden drei Gruppen von Parametern:
match '/user/:id'
In routes.rb werden die Parameter [: id] gesetztparams[:controller]
und params[:action]
ist immer verfügbar und enthält den aktuellen Controller und die aktuelle AktionGrundsätzlich sind Parameter benutzerdefinierte Daten für die Anwendung Rails.
Wenn Sie ein Formular posten, tun Sie dies im Allgemeinen mit POST request im Gegensatz zu GET request. Sie können normale Rails request als GET request betrachten, wenn Sie im Internet surfen die Website, wenn es hilft.
Wenn Sie ein Formular senden, wird das Steuerelement an die Anwendung zurückgegeben. Wie erhalten Sie die Werte, die Sie an das Formular übermittelt haben? params
ist wie.
Über Ihren Code. @vote = Vote.new params[:vote]
erstellt eine neue Abstimmung für die Datenbank unter Verwendung von Parameterdaten [: vote]. Angesichts der Tatsache, dass der von Ihnen übermittelte Benutzer des Formulars unter dem Namen "Abstimmung" angegeben wurde, befinden sich alle Daten in diesem Feld "Abstimmung" des Hashs.
Die nächsten beiden Zeilen werden verwendet, um das Element abzurufen, das der Benutzer uid an das Formular gesendet hat.
@extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])
findet das neueste oder zuletzt eingefügte Voting aus der Datenbank mit den Bedingungen item_id = item und user_id = uid.
In der nächsten Zeile werden die letzte Abstimmungszeit und die aktuelle Zeit angezeigt.
Auf der Rails Seite ist params
eine Methode, die ein ActionController::Parameters
- Objekt zurückgibt. Siehe https://stackoverflow.com/a/44070358/5462485