[RAILS] Option zum Festlegen des Ausführungszeitpunkts für die Validierung [am:]

Einleitung / Situation, in der ein Fehler auftritt

Rails implementiert so etwas wie eine Kalender-App (Reiseführer). Geben Sie das Datum, die Details und die Mitglieder an (mithilfe der Benutzerregistrierungsfunktion von devise). Registrieren Sie die Reiseseite.

Teilnehmende Benutzer (Benutzer) der Reiseseite (Reisen) Wie in der folgenden Abbildung gezeigt, wird eine Zwischentabelle mit dem Namen trip_users verwendet, um eine Viele-zu-Viele-Zuordnung zu bilden.

スクリーンショット 2020-11-15 16 14 29

Wenn Sie die erforderlichen Elemente ausfüllen und registrieren Auf dem Reisetisch スクリーンショット 2020-11-15 16 19 20

In der Tabelle trip_users スクリーンショット 2020-11-15 16 21 03

Es wird so gespeichert.

Während wir jedoch mit der Implementierung fortfahren ...

スクリーンショット 2020-11-15 16 03 24

Mit einem Fehler, den ich noch nie gesehen habe, konnte ich meine Reiseseite plötzlich nicht mehr registrieren.

Entwicklungsumgebung

Ruby 2.6.5 Rails 6.0.3.4 MySQL Visual Studio Code (GoogleChrome)

Berücksichtigung und Überprüfung der Ursache

Ich habe den Erstellungsprozess in binding.pry bestätigt.

[1] pry(#<TripsController>)> trip_params
=> <ActionController::Parameters {
(Unterlassung)

 "user_ids"=>["", "2", "3", "4", "5", "6", "1"]} permitted: true>
[2] pry(#<TripsController>)> @trip = Trip.new(trip_params)
(Unterlassung)

[3] pry(#<TripsController>)> @trip.valid?
=> false
[4] pry(#<TripsController>)> @trip.errors.full_messages
=> ["Teilnehmende Mitglieder sind ungültige Werte"]

Teilnehmende Benutzer werden mit IDs gesendet, die in user_ids in params gespeichert sind. Andererseits scheint es sich um einen "illegalen Wert" zu handeln. Was ist schief gelaufen, als es vor einiger Zeit überhaupt nicht falsch war ...

Wenn Sie sich erinnern, was Sie kürzlich getan haben, ob Sie eine Vorstellung von einem Fehler haben ...

"Übrigens habe ich die gemischte alphanumerische Validierung des Passworts nicht geschrieben ~"

Ich fand plötzlich die Beschreibung, die ich schrieb.

user.rb


class User < ApplicationRecord
 (Unterlassung)

  PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i.freeze #Gemischter alphanumerischer regulärer Ausdruck
  validates :password, format: { with: PASSWORD_REGEX, message: 'Bitte geben Sie sowohl Buchstaben als auch Zahlen an' }
end

Als ich versucht habe, einen Kommentar abzugeben ... bin ich zurück! Es scheint, dass dies die Ursache war ...

Anscheinend wurde die gemischte alphanumerische Validierung, die bei der Registrierung eines neuen Benutzers im Kennwort festgelegt wurde, aktiviert, als das andere Modell generiert wurde, mit dem es verknüpft war. wie es scheint. Es ist wahrscheinlich, dass er "Bitte alphanumerische Zeichen mischen!" Für "user_ids" spielte, bei dem es sich nur um numerische Daten handelt. Es gibt so einen seltenen Fall ...

Ist es dann möglich, diese ** Validierung nur auf die Benutzerregistrierung ** anzuwenden? Als Ergebnis der Untersuchung ...

[Official] Rails Document / validates

スクリーンショット 2020-11-15 16 29 30

Dies scheint brauchbar zu sein!

Ergebnis

Sie können den Zeitpunkt der Validierungsausführung mit der Option : on angeben. Dieses Mal möchten wir die Kennwortüberprüfung nur ausführen, wenn Sie sich als Benutzer registrieren. Schreiben Sie also "on :: create".

↓ Geändertes Benutzermodell

user.rb


class User < ApplicationRecord
 (Unterlassung)

  PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i.freeze #Gemischter alphanumerischer regulärer Ausdruck
  validates :password, format: { with: PASSWORD_REGEX, message: 'Bitte geben Sie sowohl Buchstaben als auch Zahlen an' }, on: :create
end

Dadurch bleibt die Kennwortüberprüfung erhalten Die Registrierungsfunktion der Reiseseite ist auf den gleichen Stand wie zuvor zurückgekehrt!

Am Ende / Eindruck

Ich habe eine Weile gebraucht, um die ursächliche Beschreibung zu finden. Ich habe auch gelernt, wie wichtig es ist, sich auf Bohnen festzulegen, damit ich im Fehlerfall zurückkehren kann ...

Dies ist ein schlechter Artikel für Anfänger, aber ich hoffe, er wird Ihnen helfen. Vielen Dank für das Lesen bis zum Ende.

Referenzartikel

[Official / Rails Guide] Active Record Validation [Official] Rails Document / validates [Qiita] Switch-Validierung, die je nach Situation zur Speicherzeit ausgeführt werden soll [Qiita] Rails | Geben Sie den Validierungszeitpunkt mit der Option on an

Recommended Posts

Option zum Festlegen des Ausführungszeitpunkts für die Validierung [am:]
[Validierung] Schienen Wie nach dem heutigen Datum angeben
Installieren Sie MySQL 5.6 unter CentOS6 [So geben Sie die Version an]