我一直试图弄清楚如何在不手动定义验证的情况下做到这一点但到目前为止没有任何成功。
我有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
字段?
答案 0 :(得分:1)
据我所知,在没有明确定义验证的情况下,您无法验证字段。 optional_?
和required_?
未提供验证的原因是它并不总是清楚使用什么逻辑,尤其是对于非String
字段。 Crudify使用required_?
值来确定是否在生成的UI中标记该字段,但是由您提供正确的逻辑来确定满足要求。
验证字段可以像
一样简单override def validations = super.validations :: valMinLen(1, "Required!")
或者查看有关如何创建通用Required
特征的其他问题here的答案。