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 requireet permitici?
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 requireet permitici?
Réponses:
Le paramsdans un contrôleur ressemble à un Hash, mais c'est en fait une instance de ActionController::Parameters, qui fournit plusieurs méthodes telles que requireet permit.
La requireméthode garantit qu'un paramètre spécifique est présent et, s'il n'est pas fourni, la requireméthode renvoie une erreur. Il renvoie une instance de ActionController::Parameterspour la clé transmise require.
La permitmé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::Parametersclasse retournera falsepour 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.
permitsur requirepermettre é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 :personhash indiqué par require et la personne hash n'acceptera :nameet sera :ageindiqué 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 okayvisualisent les 3e et 4e exemples?
permitmais pasrequire.