Tous les exemples de paramètres forts de la documentation Rails 4 utilisent
params.require(:person).permit(:name, :age)
Quelqu'un pourrait-il s'il vous plaît déconstruire et expliquer ce qui se passe avec require
et permit
ici?
Tous les exemples de paramètres forts de la documentation Rails 4 utilisent
params.require(:person).permit(:name, :age)
Quelqu'un pourrait-il s'il vous plaît déconstruire et expliquer ce qui se passe avec require
et permit
ici?
Réponses:
Le params
dans un contrôleur ressemble à un Hash, mais c'est en fait une instance de ActionController::Parameters
, qui fournit plusieurs méthodes telles que require
et permit
.
La require
méthode garantit qu'un paramètre spécifique est présent et, s'il n'est pas fourni, la require
méthode renvoie une erreur. Il renvoie une instance de ActionController::Parameters
pour la clé transmise require
.
La permit
méthode renvoie une copie de l'objet de paramètres, retournant uniquement les clés et valeurs autorisées. Lors de la création d'un nouveau modèle ActiveRecord, seuls les attributs autorisés sont transmis au modèle.
Cela ressemble beaucoup à la liste blanche qui était auparavant incluse dans les modèles ActiveRecord, mais il est plus logique qu'elle soit dans le contrôleur.
true
à la permitted?
méthode. Par défaut, une instance de la ActionController::Parameters
classe retournera false
pour permitted?
Répondre true
à permitted?
signifie que l'objet paramètre peut être utilisé dans l'affectation en masse; sinon, l'application lancera une erreur ForbiddenAttributes.
permit
sur require
permettre également et inclure les paramètres requis dans l'objet retourné?
Pour être plus précis, lorsque vous créez par exemple. En faisant .new(...)
, il doit y avoir un :person
hash indiqué par require et la personne hash n'acceptera :name
et sera :age
indiqué que par permit.
Exemple:
.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
visualisent les 3e et 4e exemples?
permit
mais pasrequire
.