[RUBY] [Rails] Une histoire qui a continué à vérifier incorrectement la raison pour laquelle l'action de mise à jour n'a pas réussi (mise à jour)

1. Ce que je voulais faire

La fonction d'enregistrement de l'utilisateur (propriétaire nommé) a été implémentée à l'aide de gem devise. Lorsque j'ai essayé de modifier les données enregistrées sans entrer le mot de passe, une erreur s'est produite et je craignais de la résoudre.

2. Environnement d'exécution

Ruby 2.6.5 Rails 6.0.3

3. Préparations faites comme prémisse

Les deux préparations suivantes ont été nécessaires conformément aux spécifications du côté appareil. (1) Autoriser les valeurs pour les colonnes autres que la colonne par défaut pendant account_update (sanitizer) (2) Autoriser les mises à jour sans mot de passe.

Officiel ici ou [ici](https://github.com/heartcombo/devise/wiki/How-To:-Allow-users-to-edit- Je pense que vous pouvez le faire en regardant l'article (leur-compte-sans-fournir-de-mot de passe). Si vous vérifiez Qiita, il devrait y en avoir beaucoup.

Bien que ceux-ci aient été faits, la mise à jour n'a pas pu être enregistrée correctement pour une raison quelconque, comme indiqué ci-dessous, probablement à cause des spécifications du périphérique ...? Être inquiet à l'agonie.

スクリーンショット 2020-09-02 12.00.22.png

Au cours de la vérification des erreurs ci-dessus, j'étais inquiet comme suit.

1.ArgumentError avec 0 ~, donc l'argument n'est-il pas passé en premier lieu? (Mais les paramètres passent correctement ...) 2. Si le message d'erreur est un mot de passe, la mise à jour sans mot de passe de l'appareil ne fonctionne pas?

4. Conclusion

C'était une erreur car la validation du mot de passe était bloquée.

owner.rb


class Owner < ApplicationRecord

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

  validates :name, presence: true
  validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX}
  validates :password, presence: true, confirmation: true, length: { minimum: 7 }

  has_many :shops
end

La validation du modèle ci-dessus a également été appliquée au moment de la mise à jour, donc c'était sous la forme d'une erreur. Si vous y réfléchissez bien, le message d'erreur défini pour la validation est affiché, donc c'est naturel, n'est-ce pas?

Alors

owner.rb


class Owner < ApplicationRecord

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

  validates :name, presence: true
  validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX}
  validates :password, presence: true, confirmation: true, length: { minimum: 7 },on: :create

  has_many :shops
end

Il a été résolu en définissant la validation du mot de passe uniquement au moment de la création de cette manière.

5. Erreurs dans la boue

スクリーンショット 2020-09-02 14.49.05.png

Concernant le message d'erreur au moment de binding.pry plus tôt, je pensais que l'argument n'était pas bien passé ici, mais que la reconnaissance était erronée en premier lieu.

Une fois l'argument passé correctement dans l'action de mise à jour du contrôleur, la mise à jour est à nouveau exécutée sur l'écran de débogage, n'est-ce pas? Donc, la mise à jour que j'ai dite sur cet écran n'a aucun argument, donc j'obtiens juste une erreur disant qu'il n'y a pas d'arguments.

C'est une erreur que j'ai faite parce que je n'ai pas bien compris ce flux ... Réflexion.

Recommended Posts

[Rails] Une histoire qui a continué à vérifier incorrectement la raison pour laquelle l'action de mise à jour n'a pas réussi (mise à jour)
L'histoire de l'introduction de Gradle en tant que modernisation d'un système existant qui ne gérait pas de packages
L'histoire selon laquelle la mise à jour forcée n'a pas pu être mise en œuvre
L'histoire qui a conduit à résoudre l'erreur car postgres n'a pas commencé avec docker-compose up
L'histoire selon laquelle la connexion à la base de données et les autres délais d'expiration n'ont pas expiré selon la valeur définie
[Gradle] L'histoire selon laquelle le fichier de classe n'existait pas dans le fichier jar
L'histoire selon laquelle l'erreur de construction ne s'est pas arrêtée lors de l'utilisation d'Eclipse 2020
Correspondant à "erreur que l'authentification de base ne réussit pas" dans le code de test "L'histoire qui n'a pas pu être faite"
Comment interagir avec un serveur qui ne plante pas l'application
[Rails] Comment passer la validation telle que le mot de passe lors de l'exécution d'une action de mise à jour
Une histoire sur l'envoi d'une pull request à MinGW pour mettre à jour la version libgr
Après avoir vérifié le problème de Montyhall avec Ruby, c'était une histoire que je pouvais bien comprendre et que je ne comprenais pas bien
Une histoire que les personnes qui ont fait iOS solidement peuvent être accro à la mise en œuvre de Listener lors du passage à Android