提升记录:必填字段的空值,但没有验证错误

时间:2014-03-14 03:39:27

标签: validation scala lift lift-record

我一直试图弄清楚如何在不手动定义验证的情况下做到这一点但到目前为止没有任何成功。

我有StringField

class Foo private() extends MongoRecord[Foo] with ObjectIdKey[Foo] {
  ...
  object externalId extends StringField(this, 255) {
    // none of these seem to have any effect on validation whatsoever:
    override def optional_? = false
    override def required_? = true
    override def defaultValueBox = Empty
  }
  ...
}

现在,当我在.validate上拨打Foo时,它不会返回任何错误:

val foo = Foo.createRecord
foo.validate match {
  case Nil => foo.save
  ...
}

...并且文档保存到(mongo)数据库中,没有externalId

所以问题是:是否有任何方式让Lift自动验证丢失的字段而不必手动将内容添加到validations

编辑:我是否认为Django和Rails等框架提供的生产力类型太多了?即基本和非常频繁的验证之类的东西,除了一些声明性的属性/标志之外,不需要写任何东西。如果是的话,为什么Lift选择不提供这种开箱即用的东西?为什么的人希望.validate自动考虑所有def required_? = true / def optional_? = false字段?

1 个答案:

答案 0 :(得分:1)

据我所知,在没有明确定义验证的情况下,您无法验证字段。 optional_?required_?未提供验证的原因是它并不总是清楚使用什么逻辑,尤其是对于非String字段。 Crudify使用required_?值来确定是否在生成的UI中标记该字段,但是由您提供正确的逻辑来确定满足要求。

验证字段可以像

一样简单
override def validations = super.validations :: valMinLen(1, "Required!")

或者查看有关如何创建通用Required特征的其他问题here的答案。