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 requireund permithier 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 requireund permithier passiert?
Antworten:
Das paramsin einem Controller sieht aus wie ein Hash, ist aber tatsächlich eine Instanz von ActionController::Parameters, die verschiedene Methoden wie requireund bereitstellt permit.
Die requireMethode stellt sicher, dass ein bestimmter Parameter vorhanden ist. Wenn dieser nicht angegeben wird, gibt die requireMethode einen Fehler aus. Es gibt eine Instanz von ActionController::Parametersfür den übergebenen Schlüssel zurück require.
Die permitMethode 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.
trueder permitted?Methode. Standardmäßig gibt eine Instanz der ActionController::ParametersKlasse falsefür " permitted?Antworten trueauf" zurück, was permitted?bedeutet, dass das Parameterobjekt für die Massenzuweisung verwendet werden kann. Andernfalls gibt die App einen ForbiddenAttributes-Fehler aus.
permitauf requireauch die erforderlichen Parameter in der zurückgegebene Objekt ermöglichen und beinhalten?
Genauer gesagt, wenn Sie z. Dabei .new(...)muss ein :personHash durch "Anfordern" angegeben werden, und der Hash der Person wird nur durch Erlaubnis akzeptiert :nameund :ageangezeigt.
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 okayvisualisieren das 3. und 4. Beispiel?
permitaber nichtrequire.