[RUBY] [Rails] Unerwarteter Validierungsfehler im Gerät

Einführung

Ich war süchtig nach einem unerwarteten Fehler bei der Entwicklung, der von der Benutzerverwaltung behoben wird, und habe viel Zeit geschmolzen, sodass ich ihn als Memorandum belassen werde.

Umwelt / Edelstein (ver)

Fazit

** Seien Sie vorsichtig, wenn Sie Ihr Benutzermodell selbst validieren. ** **.

Ich werde einige vorläufige Untersuchungen durchführen und diese in Zukunft umsetzen. ..

Annahme

Nach der Bundle-Installation habe ich das Benutzermodell wie folgt validiert: Ich wollte das Passwort auf maximal 7 Zeichen beschränken.

Sie haben erfolgreich einen neuen Benutzer registriert.

(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

  (Kürzung)

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

Phänomen

Ein Fehler tritt auf, wenn versucht wird, eine Zwischentabelle (Stylist-Modell) gleichzeitig mit dem Erstellen eines neuen Shops (Shop-Modell) nach der Registrierung eines Benutzers (Benutzermodell) zu erstellen.

Image from Gyazo

Die Parameter haben korrekte Werte und ich konnte nicht herausfinden, was ** "illegaler Wert" ** war. Auch in der Situation von ** "Ich kann mich nicht registrieren (neu / erstellen), aber bearbeiten (bearbeiten / aktualisieren)" ** vertiefte sich das Rätsel und ich verbrachte viel Zeit. ..

Hypothese

Wird es nicht gelöst, indem der externe Schlüssel auf Null gesetzt wird?

(models/stylist.rb)
class Stylist < ApplicationRecord
#Vor der Korrektur
  belongs_to :shop
  belongs_to :user
#Überarbeitet
  belongs_to :shop, optional: true
  belongs_to :user, optional: true
end

···ich hab es nicht ausgearbeitet.

Lösung

Es besteht kein Zweifel, dass die Ursache die Validierung ist. Wenn Sie also das Verhalten überprüfen, während Sie die im Benutzermodell beschriebenen Validierungen nacheinander abbrechen,

(models/user.rb)
class User < ApplicationRecord

  (Kürzung)

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

↑ validiert: Alles wurde gelöst, als ich das Passwort gelöscht habe! !!

Und ich habe den Anpassungsinhalt an den folgenden Stellen neu geschrieben.

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

  (Kürzung)

#Vor der Korrektur
  config.password_length = 6..128
#Überarbeitet
  config.password_length = 7..128

Warum werfen Sie beim Speichern einer Zwischentabelle überhaupt einen Fehler? Es ist immer noch ein Rätsel, aber das Gerät hat eine Standardvalidierung, und ich denke, es hat schlecht auf die Validierung reagiert, die ich vorgenommen habe. .. (Wird studieren)

Außerdem habe ich auf den folgenden Artikel verwiesen und ihn angepasst, und er funktioniert einwandfrei!

Referenzartikel

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

Recommended Posts

[Rails] Unerwarteter Validierungsfehler im Gerät
[Rails] Passen Sie die Validierung des Geräts an
ActiveRecord :: NotNullViolation im Gerätefehler
[Rails] Fehler während der Installation des Geräts
[Rails] Einstellung des Sitzungszeitlimits im Gerät
[Rails] Implementierung des Anmeldebildschirms in Devise
[Schienen] erfinden
[Rails] -Syntaxfehler, unerwartetes tSTRING_END, erwartet ''
[Rails] Funktionseinschränkungen im Gerät (Login / Logout)
Fehler bei der Implementierung bei der Implementierung der Spring-Validierung
[Schienen] Validierung einstellen
[Rails] Einführung in das Gerät
Group_by in Rails
[Rails5] Rspec -validierung-
Erstellen Sie die Authentifizierungsfunktion in der Rails-Anwendung mit devise
Der Weg zur Japanisierung von Rails führt zu Fehlermeldungen
Fehler bei der Bundle-Installation beim Ausführen neuer Schienen
[Rails] Lösung, wenn ein Migrationsfehler in Acts-as-Taggable-On auftritt
500 Interner Serverfehler tritt in der Rails-Produktionsumgebung auf
[Rails] Lösung für "Uglifier :: Error: Unerwartetes Zeichen '' '"
[Schienen] In Gerät hinzugefügt: Benutzername nicht zur Datenbank hinzugefügt
[Rails] ActiveRecord :: HasManyThrough-Bestellfehler in Benutzer # show
[Hinweis] Rails-Fehlerliste
Migrationsfehler nach dem Zuordnen von Activerecord in der Rails5 + Docker-Umgebung (2)
Modellassoziation in Rails
Hinzufügen von Spalten in Rails
Führen Sie devise with Rails ein, um Benutzerverwaltungsfunktionen zu implementieren
Japanische Lokalisierung von Rails-Fehlermeldungen [Objekte entwerfen / bilden usw.]
Deaktivieren Sie Turbolinks in Schienen
Migrationsfehler nach Activerecord-Zuordnung in der Rails5 + Docker-Umgebung
Mac Rails Installationsfehler
Gerät mit Schienen handhaben
[Rails] Standardmäßig festgelegte Kennwortüberprüfung abbrechen / ändern
^, $ im regulären Ausdruck von Rails
Verwenden Sie Bilder mit Schienen
Fehlerbehandlung mit Graphql-Ruby
[Rails] entwickeln eine Einführungsmethode
Migration in Schienen verstehen
[Schienen] Standardwerte festlegen
Teilen Sie route.rb in Rails6
Markdown in Rails implementiert
[Rails] Ich habe die Validierungsfehlermeldung mit asynchroner Kommunikation implementiert!
Super einfach in 2 Schritten! So installieren Sie devise! !! (Schienen 5 Version)
[Rails] Bei der Beschreibung der Validierung ist Vorsicht geboten
[Rails] Probleme, die mit devise nicht registriert / angemeldet werden können
Implementieren Sie die Benutzerregistrierungsfunktion und die Unternehmensregistrierungsfunktion separat in Rails devise