如何在写入/读取其值之前在Lift Record字段上应用转换/过滤器

时间:2013-08-25 20:39:02

标签: activerecord lift before-save lift-mapper

我正在使用Lift Record持久性,我想在设置或获取其值时在Field上应用一些转换。例如,对于StringField,我想在Record对象中自动将其设置为小写。

object someField extends StringField(this, 64) {
   ...
   // how do I apply transformations here?
   ...
}

在Lift Mapper中有一个方法setFilter就是这样做的,但我在Record中找不到它的等价物。在Mapper中它看起来像这样:

object someField extends MappedString(this, 64) {
   ...
   override def setFilter = trim _ :: toUpper _ :: super.setFilter
   ...
}

我正在考虑的夫妻选择是:

  • 覆盖set方法,但有很多方法,我害怕不完全覆盖所需方法的子集,所以我无法想象后果。 :)
  • 使用生命周期回调 - 看起来有点矫枉过正。

感谢任何帮助。谢谢;)

1 个答案:

答案 0 :(得分:0)

将信用指向@jcern指出:

记录的方法def setFilter: List[(ValueType) ⇒ ValueType]def setFilter: List[(FieldType) ⇒ FieldType]非常相似。

以相同的方式使用,即在设置或查询值时将应用过滤器。这是一个简单的例子:

class Tag extends MongoRecord[Tag] with ObjectIdPk[Tag] {
  ...
  object name extends StringField(this, 32) {
    override def setFilter = trim _ :: toLower _ :: super.setFilter
  }
  ...
}

Tag.createRecord.name("UPPER")                
// lowercases tag name:
//res1: Tag = class Tag={name=upper, _id=521bb306e4b04eacd74dd217}