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.
Wenn Sie die erforderlichen Elemente ausfüllen und registrieren Auf dem Reisetisch
In der Tabelle trip_users
Es wird so gespeichert.
Während wir jedoch mit der Implementierung fortfahren ...
Mit einem Fehler, den ich noch nie gesehen habe, konnte ich meine Reiseseite plötzlich nicht mehr registrieren.
Ruby 2.6.5 Rails 6.0.3.4 MySQL Visual Studio Code (GoogleChrome)
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
Dies scheint brauchbar zu sein!
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!
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.
[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