2012-05-18 90 views
5

我正在将我的Grails 1.3.7应用程序升级到2.0.3,并修复了大部分问题。但是,我有用于创建用户并将其保存到数据库的代码。代码不应该通过验证,因为我正在重复使用已经被使用的用户名,并且对用户名有一个唯一的限制。 .validate()返回true,但当代码user.save()被MySql唯一约束错误调用时,代码实际上是炸弹。升级后Grails验证失效

应该抛出一个错误:

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() 
     } 
} 

在User.groovy:

static constraints = { 
    username(blank: false, unique: true); 
    ... 
} 

任何想法?

编辑:我也从Acegi升级到Spring Security插件。我不认为这是相关的,但我想我会提及它。

我提出了一个患有此问题的示例:https://github.com/skazzaks/Grails-Unique-Test这使得它看起来像一个错误。

+0

在测试中这样做对你没有帮助,或者你是如何遇到这个问题的?我设置了一个简单的单元测试,并且唯一的约束对我来说工作正常。 –

+0

@JarredOlson当我运行应用程序并尝试提交一个新用户时(用户名已被占用),这是失败的。这在我生产的1.3.7版本上正常工作。我不确定如何解释差距。 – skaz

+0

在运行时将唯一约束添加到grails应用程序后,我遇到了一些相关的验证问题。 validate()不会抱怨那些不唯一的值。它帮助清理,手动删除目标目录并编译。 – HumanInDisguise

回答

0

我相信这是一个错误,因为我的域类在src/groovy

3

几天前,我在从1.3.7升级到2.0.3时遇到了类似的奇怪验证问题。

对我来说,什么技巧是手动清除我的目标目录。显然,重新编译所有的类会使应用程序重新走上正轨。

不知道它是否会适用于您的情况,但可能值得一试。

+0

在运行时将唯一约束添加到grails应用程序后,我遇到了一些有关的验证问题。 validate()不会抱怨那些不唯一的值。它帮助清理,手动删除目标目录并编译。 – HumanInDisguise

相关问题