web-dev-qa-db-fra.com

Que fait `params.require (: personne) .permit (: nom, âge)` dans Rails 4?

Tous les exemples de paramètres forts dans Rails 4 docs 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?

124
Erik Trautman

La variable params dans un contrôleur ressemble à un hachage, mais il s’agit en fait d’une instance de ActionController::Parameters , qui fournit plusieurs méthodes telles que require et permit

La méthode require s'assure de la présence d'un paramètre spécifique. S'il n'est pas fourni, la méthode require lève une erreur. Il retourne une instance de ActionController::Parameters pour la clé passée dans require.

La méthode permit renvoie une copie de l'objet de paramètres, en ne renvoyant que les clés et les valeurs autorisées. Lors de la création d'un 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 que ce soit dans le contrôleur.

163
fivedigit

Pour être plus précis, lorsque vous créez par exemple. Pour .new(...), il doit y avoir :person hash indiqué par require et la personne hash acceptera seulement :name et :age indiqués par permis.

Exemple:

.new(person: { name: "Bhojendra", age: 32 }) // okay
.new(person: { name: "Rauniyar" }) // okay
.new(person: { name: "Bhojendra", other: 'asdf' }) // not okay
.new(person: { full_name: "Bhojendra Rauniyar" }) // not okay
.new(detail: { name: "Bhojendra", age: 32 }) // not okay, must be person
0