Comment est-ce:

 def model1_params
   params.require(:model1).permit(:key1, :key2) 
 end

Plus sûr que cela?

 def model1_params
   params.permit(:key1, :key2)
 end

Pourquoi require(:model1) est-il requis?

0
user7424720 17 janv. 2017 à 09:38

2 réponses

Meilleure réponse

Ce n'est pas vraiment plus sûr, c'est juste une façon d'organiser les paramètres en objets.

Si vous dites params.require(:model).permit(:a) qui s'attend à ce que les paramètres entrent en tant que { model: { a: <val> } }. Cet espace de noms de style de hachage imbriqué est la valeur par défaut pour les échafaudages générés, mais les routes fonctionnent parfaitement sans lui (je n'ai pas utilisé params.require depuis un moment).

Le but des paramètres sécurisés est de vous empêcher de faire quelque chose comme model.update(params) qui n'est pas sûr parce que les clients peuvent alors mettre à jour toutes les attributs de leur choix, comme id. Les méthodes <model>_params utilisées pour implémenter les paramètres sécurisés sont essentiellement des fonctions de filtrage qui renvoient une version sur liste blanche du hachage params.

Vous n'avez donc pas besoin d'utiliser params.require ou params.permit, vous pouvez l'écrire par zéro si vous le souhaitez:

  def whitelisted_params
    params.select { |key| key.in? [:my, :whitelisted, :params] }
  end
2
max pleaner 17 janv. 2017 à 06:50

params.permit(:key1, :key2) n'est pas sécurisé. C'est parce que vous autorisez directement les paramètres sans les associer à un objet.
En revanche, params.require(:model1).permit(:key1, :key2) est plus sécurisé car vous liez des clés avec l'objet.

0
Chakreshwar Sharma 17 janv. 2017 à 07:04