[RUBY] [Rails] Erreur de validation inattendue dans l'appareil

introduction

J'étais accro à une erreur inattendue avec le dispositif, qui est pris en charge par la gestion des utilisateurs, et fondu une quantité considérable de temps, donc je vais le laisser comme un mémorandum.

Environnement / Gem (ver)

Conclusion

** Soyez prudent lorsque vous validez vous-même votre modèle utilisateur. ** **

Je vais faire des recherches préliminaires et les mettre en œuvre à l'avenir. ..

supposition

Après l'installation du bundle, j'ai validé le modèle utilisateur comme suit: Je voulais mettre une limite de 7 caractères ou plus sur le mot de passe.

Vous avez enregistré avec succès un nouvel utilisateur.

(models/user.rb)
class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  has_many   :stylists
  has_many   :shops, through: :stylists

  (réduction)

  validates :password, presence: true, length: { minimum: 7 }, format: { with: /(?=.*\d+.*)(?=.*[a-zA-Z]+.*)./ }
end 

phénomène

Une erreur se produit lors de la tentative de création d'une table intermédiaire (modèle Stylist) en même temps que la création d'une nouvelle boutique (modèle Boutique) après l'enregistrement d'un utilisateur (modèle utilisateur).

Image from Gyazo

Les paramètres ont des valeurs correctement, et je n'ai pas pu trouver ce qui était ** "valeur illégale" **. Aussi, dans la situation de ** "Je ne peux pas m'inscrire (nouveau / créer) mais je peux éditer (modifier / mettre à jour)" **, le mystère s'est approfondi et j'ai passé beaucoup de temps. ..

hypothèse

N'est-il pas résolu en autorisant zéro de la clé externe?

(models/stylist.rb)
class Stylist < ApplicationRecord
#Avant correction
  belongs_to :shop
  belongs_to :user
#modifié
  belongs_to :shop, optional: true
  belongs_to :user, optional: true
end

···C'était mauvais.

Solution

Il ne fait aucun doute que la cause est la validation, donc si vous vérifiez le comportement en annulant les validations décrites dans le modèle utilisateur une par une,

(models/user.rb)
class User < ApplicationRecord

  (réduction)

  validates :password, presence: true, length: { minimum: 7 }, format: { with: /(?=.*\d+.*)(?=.*[a-zA-Z]+.*)./ }
end 

↑ valide: tout a été résolu lorsque j'ai supprimé le mot de passe! !!

Et j'ai réécrit le contenu de la personnalisation aux endroits suivants.

(config/initializers/devise.rb)
class User < ApplicationRecord

  (réduction)

#Avant correction
  config.password_length = 6..128
#modifié
  config.password_length = 7..128

Pourquoi lancez-vous une erreur lors de l'enregistrement d'une table intermédiaire en premier lieu? C'est toujours un mystère, mais la conception a une validation par défaut, et je pense que cela a fait une mauvaise réaction avec la validation que j'ai faite. .. (Étudiera)

De plus, j'ai fait référence à l'article suivant et l'ai personnalisé, et cela fonctionne très bien!

Article de référence

https://qiita.com/hirokihello/items/862284c60429be5e01cd https://github.com/heartcombo/devise/wiki/Customize-minimum-password-length

Recommended Posts

[Rails] Erreur de validation inattendue dans l'appareil
[Rails] Personnaliser la validation de l'appareil
Erreur ActiveRecord :: NotNullViolation dans Devise
[rails] erreur lors de l'installation du périphérique
[Rails] Paramètre de délai d'expiration de session dans l'appareil
[rails] Implémentation de l'écran de connexion dans la devise
[Rails] concevoir
[Rails] Erreur de syntaxe, tSTRING_END inattendue, attendue ""
[Rails] Restrictions de fonction dans l'appareil (connexion / déconnexion)
Erreur de mise en œuvre lors de la mise en œuvre de la validation Spring
[rails] Définir la validation
[Rails] Présentation du dispositif
Group_by dans Rails
[Rails5] Rspec -validation-
Créer une fonction d'authentification dans l'application Rails à l'aide de devise
La route vers la japonaisisation des rails conçoit des messages d'erreur
Erreur lors de l'installation de l'ensemble lors de l'exécution de rails neufs
[Rails] Solution lorsqu'une erreur de migration se produit dans agit-as-taggable-on
Une erreur de serveur interne 500 se produit dans l'environnement de production Rails
[Rails] Solution pour "Uglifier :: Erreur: caractère inattendu" ""
[Rails] Ajouté dans le modèle: nom d'utilisateur non ajouté à la base de données
[Rails] ActiveRecord :: HasManyThrough Order Error in Users # show
[Note] Liste des erreurs de rails
Erreur de migration après avoir associé Activerecord dans l'environnement Rails5 + Docker (2)
Association de modèles dans Rails
Ajout de colonnes dans les rails
Introduire la conception avec Rails pour implémenter la fonctionnalité de gestion des utilisateurs
Localisation japonaise des messages d'erreur Rails [objets de conception / formulaire, etc.]
Désactiver les turbolinks dans les rails
Erreur de migration après l'association Activerecord dans l'environnement Rails5 + Docker
Erreur d'installation de Mac Rails
Manipuler le dispositif avec des rails
[Rails] Annuler / modifier la validation du mot de passe du périphérique définie par défaut
^, $ dans l'expression régulière Rails
Utiliser des images avec des rails
Gestion des erreurs avec Graphql-ruby
[Rails] conçoit une méthode d'introduction
Comprendre la migration dans les rails
[rails] concevoir les valeurs par défaut
Diviser routes.rb dans Rails6
Markdown implémenté dans Rails
[Rails] J'ai implémenté le message d'erreur de validation avec une communication asynchrone!
Super facile en 2 étapes! Comment installer la devise! !! (version rails 5)
[Rails] Où faire attention dans la description de la validation
[rails] Problèmes qui ne peuvent pas être enregistrés / connectés avec l'appareil
Implémenter la fonction d'enregistrement des utilisateurs et la fonction d'enregistrement de l'entreprise séparément dans Rails concevoir