2013-08-25 7 views

Antwort

140

Die params in einem Controller sieht aus wie ein Hash, aber es ist eigentlich eine Instanz von ActionController::Parameters, die mehrere Methoden wie require und permit bietet.

Die Methode stellt sicher, dass ein bestimmter Parameter vorhanden ist, und wenn sie nicht bereitgestellt wird, gibt die Methode require einen Fehler aus. Sie gibt eine Instanz ActionController::Parameters für den Schlüssel zurück, der an require übergeben wurde.

Die Methode permit gibt eine Kopie des Parameterobjekts zurück und gibt nur die zulässigen Schlüssel und Werte zurück. Beim Erstellen eines neuen ActiveRecord-Modells werden nur die zulässigen Attribute an das Modell übergeben.

Es sieht sehr ähnlich aus wie das Whitelisting, das früher in ActiveRecord-Modellen enthalten war, aber es macht mehr Sinn, dass es im Controller ist.

+24

Die Beschreibung der Erlaubnis ist ein bisschen aus: Erlaubnis gibt einen anderen Hasch zurück, der nur den erlaubten Schlüssel enthält UND (dies ist kritisch) antwortet mit 'wahr' auf die 'erlaubte?' Methode. Eine Instanz der Klasse "ActionController :: Parameters" gibt standardmäßig "false" für "erlaubt?" Zurück. Reagiert 'true' auf' erlaubt? 'Bedeutet, dass das Parameterobjekt in der Massenzuweisung verwendet werden kann; Andernfalls wirft die App einen ForbiddenAttributes-Fehler. – sameers

+0

Erlaubt das Verketten von 'permit' auf' require' auch die Angabe der erforderlichen Parameter im zurückgegebenen Objekt? – Dennis