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.
Ruby 2.6.5 Rails 6.0.3
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.
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?
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.
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