web-dev-qa-db-de.com

Rails params erklärt?

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.

221
Dru

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 .

275
David Grayson

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.

73
hammar

Params enthält die folgenden drei Gruppen von Parametern:

  1. Vom Benutzer angegebene Parameter
    • GET ( http://domain.com/url?param1=value1&param2=value2 setzt params [: param1] und params [: param2])
    • POST (z. B. JSON, XML wird automatisch analysiert und in params gespeichert)
    • Hinweis: Standardmäßig dupliziert Rails die vom Benutzer angegebenen Parameter und speichert sie in params [: user], wenn in UsersController, kann dies mit der Einstellung wrap_parameters geändert werden
  2. Routing-Parameter
    • match '/user/:id' In routes.rb werden die Parameter [: id] gesetzt
  3. Standardparameter
    • params[:controller] und params[:action] ist immer verfügbar und enthält den aktuellen Controller und die aktuelle Aktion
47
thejaz

Grundsä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.

13
Smar

Auf der Rails Seite ist params eine Methode, die ein ActionController::Parameters - Objekt zurückgibt. Siehe https://stackoverflow.com/a/44070358/5462485

4
Margotte