2012-12-13 59 views
2

我有一个名为OurCompany的域对象,我希望能够故意插入一行大多数为空的行。当用户填写表单时,我想验证它并且不允许空白。Grails:约束:数据库允许为空,但表单可能不为空

class OurCompany { 

    static constraints = {   
     enterpriseName blank:false, nullable:true 
    } 

    String enterpriseName 

    static belongsTo = [measurement:Measurement] 

} 

当我在数据库中创建空行时,我关闭了验证并且工作正常。

ourCompany = new OurCompany(); 
measurement.addToOurCompany(ourCompany).save(validate:false); 

后来,当我更新该行时,即使存在空值或空值,也会忽略验证并保存记录。

def ourCompany = loadOrCreateOurCompany(); 
def industrySectors = loadIndustrySectors(); 

bindData (ourCompany, params) 

ourCompany.validate() 
if (ourCompany.hasErrors()) { 
    ourCompany.errors.allErrors.each { 
     println(it) 
    } 
} else {    
    ourCompany.save(); 
} 

我如何告诉我想要DATABASE接受空的Grails,但验证时,不允许为空或空格?

回答

4

这就是Command Objects

+0

谢谢Greg。我最终实现了这一点,但我希望有一个更好的方法。发现它是一个真正的时间浪费。 – Spider

+0

我不同意这个解决方案很丑并且浪费时间。我不确定除了在域级别允许某种条件约束之外它怎么会更好。这可能是因为你错误地使用了命令对象,所以感觉很痛苦。 – Gregg

+0

也许吧。当我完成我的实施时,我会在这里发布。 – Spider

0

解决方案(到目前为止)真难看。似乎没有办法使一个Grails域属性为空,并且有一个CONSTRAINT。唯一的方法就是使用Command对象进行验证。在我看来,这确实是一个非常痛苦的解决方案,而且相当不雅,记录不完整。这是我最不愉快的Grails经历。

相关问题