2

ActiveRecord 处理时间戳,如下所示:

  • 插入数据?created_at 已定义
  • 更新数据?updated_at 被重新定义

我将如何使用 SORM 来做到这一点?

4

1 回答 1

3

乍一看,这样的事情可能会起作用:

import org.joda.time._
object Db extends Instance (entities = ...) {
  override def save [T <: AnyRef : TypeTag] ( v : T ) 
    = v match {
        case v : Artist with Persisted =>
          super.save( v.copy( updatedAt = DateTime.now() ) )
        case v : Artist =>
          super.save( v.copy( createdAt = DateTime.now() ) )
        // ... so on for other entities
        case v =>
          super.save(v)
      }
}

但是,您将如何从头开始创建这些艺术家实例?应该为这些日期字段分配混乱null的 s 或 null ish 日期值,还是应该将它们包裹在Options 中?好吧,其中任何一个都可以解决问题,但这是另一种选择:

import org.joda.time._
case class Artist 
  ( name : String, 
    updatedAt : DateTime = DateTime.now(),
    createdAt : DateTime = DateTime.now() )

object Db extends Instance (entities = ...) {
  override def save [T <: AnyRef : TypeTag] ( v : T ) 
    = v match {
        case v : Artist with Persisted =>
          super.save( v.copy( updatedAt = DateTime.now() ) )
        case v =>
          super.save(v)
      }
}

我得告诉你整个问题对我来说不是很自然。我无法想象这种行为会带来什么好处。但话又说回来,我已经向您展示了这些选项。

于 2012-12-01T13:01:47.250 回答