2012-05-18 8 views
5

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.

+0

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. –

+0

@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

+0

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

Antwort

0

Ich glaube, das ist ein Fehler aufgrund der Tatsache, dass meine Domain-Klassen in src/groovy sind.

3

Ich habe vor ein paar Tagen ein ähnliches seltsames Validierungsproblem beim Upgrade von 1.3.7 auf 2.0.3 erlebt.

Was war der Trick für mich ein manuelles Löschen meines Zielverzeichnisses. Offensichtlich rückt die Neukompilierung aller Klassen die Anwendung wieder auf den richtigen Weg.

Ich weiß nicht, ob es in Ihrem Fall funktioniert, aber vielleicht einen Versuch wert.

+0

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