Ich bin dabei, meine Grails 1.3.7 App auf 2.0.3 zu aktualisieren, und ich habe die meisten Probleme behoben. Allerdings habe ich Code, der verwendet, um einen Benutzer erstellt und speichert sie in der Datenbank. Der Code sollte die Validierung NICHT bestehen, da ich einen Benutzernamen wiederverwende, der bereits vergeben ist, und es gibt eine eindeutige Einschränkung für den Benutzernamen. .validate()
gibt True zurück, aber dann bombardiert der Code tatsächlich, wenn user.save()
mit einem MySql-Constraint-Fehler aufgerufen wird.Grails Validierung funktioniert nicht nach dem Upgrade
Sollte ein Fehler ausgegeben:
def submitSignup = {
def user = new User(params)
user.validate()
if (!user.hasErrors()) {
...
// This line bombs with the MySql unique constraint I would have expected .validate() to get
user.save()
}
}
In User.groovy:
static constraints = {
username(blank: false, unique: true);
...
}
Irgendwelche Ideen?
EDIT: Ich aktualisiere auch das Spring Security Plugin von Acegi. Ich denke nicht, dass dies relevant wäre, aber ich dachte, ich würde es erwähnen.
Ich habe eine Probe, die unter dem Problem leidet um: https://github.com/skazzaks/Grails-Unique-Test Dies macht es definitiv wie ein Fehler aussehen.
Ist dies für Sie in einem Test fehlgeschlagen oder wie sind Sie auf dieses Problem gestoßen? Ich habe einen einfachen Komponententest eingerichtet und die einzigartige Einschränkung funktioniert für mich richtig. –
@JarredOlson Dies schlägt fehl, als ich die Anwendung ausgeführt und versucht habe, einen neuen Benutzer (mit dem Benutzernamen bereits vergeben) zu senden. Dies funktioniert korrekt auf der Version 1.3.7, die ich in der Produktion habe. Ich bin mir nicht sicher, wie ich die Disparität erklären soll. – skaz
Ich habe ein etwas ähnliches Validierungsproblem festgestellt, nachdem ich die einzigartige Einschränkung einer Grails-Anwendung hinzugefügt hatte, während sie ausgeführt wurde. validate() hat sich nicht über Werte beschweren, die nicht eindeutig waren. Es half, das Zielverzeichnis zu säubern, manuell zu löschen und zu kompilieren. – HumanInDisguise