ActiveRecord は、次のようなタイムスタンプを処理します。
- データを挿入していますか?created_at が定義されている
- データを更新していますか?updated_at が再定義されました
SORMを使用してどうすればよいですか?
一見すると、次のようなものが機能する可能性があります。
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 っぽい日付値を割り当てる必要がありますか、Option
それとも s でラップする必要がありますか? どちらでも問題は解決するはずですが、別のオプションを次に示します。
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)
}
}
問題全体が私にはあまり自然に感じられないことを言わなければなりません。そのような振る舞いが有益になるシナリオは想像できません。しかし、もう一度オプションを提示しました。