Alle Beispiele für starke Parameter in Rails 4-Dokumenten werden verwendet
params.require(:person).permit(:name, :age)
Könnte jemand bitte dekonstruieren und erklären, was mit require
und permit
hier passiert?
Alle Beispiele für starke Parameter in Rails 4-Dokumenten werden verwendet
params.require(:person).permit(:name, :age)
Könnte jemand bitte dekonstruieren und erklären, was mit require
und permit
hier passiert?
Antworten:
Das params
in einem Controller sieht aus wie ein Hash, ist aber tatsächlich eine Instanz von ActionController::Parameters
, die verschiedene Methoden wie require
und bereitstellt permit
.
Die require
Methode stellt sicher, dass ein bestimmter Parameter vorhanden ist. Wenn dieser nicht angegeben wird, gibt die require
Methode einen Fehler aus. Es gibt eine Instanz von ActionController::Parameters
für den übergebenen Schlüssel zurück require
.
Die permit
Methode 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 der Whitelist sehr ähnlich, die früher in ActiveRecord-Modellen enthalten war, aber es ist sinnvoller, sie im Controller zu haben.
true
der permitted?
Methode. Standardmäßig gibt eine Instanz der ActionController::Parameters
Klasse false
für " permitted?
Antworten true
auf" zurück, was permitted?
bedeutet, dass das Parameterobjekt für die Massenzuweisung verwendet werden kann. Andernfalls gibt die App einen ForbiddenAttributes-Fehler aus.
permit
auf require
auch die erforderlichen Parameter in der zurückgegebene Objekt ermöglichen und beinhalten?
Genauer gesagt, wenn Sie z. Dabei .new(...)
muss ein :person
Hash durch "Anfordern" angegeben werden, und der Hash der Person wird nur durch Erlaubnis akzeptiert :name
und :age
angezeigt.
Beispiel:
.new(person: { name: "Bhojendra", age: 32 }) // okay
.new(person: { name: "Rauniyar" }) // okay
.new(person: { name: "Bhojendra", other: 'asdf' }) // not okay, other not permitted
.new(person: { full_name: "Bhojendra Rauniyar" }) // not okay, full_name not permitted
.new(detail: { name: "Bhojendra", age: 32 }) // not okay, must be person
not okay
visualisieren das 3. und 4. Beispiel?
permit
aber nichtrequire
.