LiftでCRUDifyしてみる

Liftでスニペットを使ったHello Worldとかは簡単にできたので、CRUDアプリを作ってみます。CRUDifyというトレイトを使ってズルができるらしいです。平たく言うと動的なscaffoldみたいなものですかね。
まずはこんなモデルを作成してみました。意味もわからず書いていますが、MetaMapperにwith CRUDify[Long, Message]とやっているのがポイント。

package code.model

import java.util.Date

import _root_.net.liftweb.mapper._
import _root_.net.liftweb.util._
import _root_.net.liftweb.common._

class Message extends LongKeyedMapper[Message] with IdPK {
  def getSingleton = Message
  
  object username extends MappedString(this, 10)
  object message extends MappedString(this, 100)
  object date extends MappedDateTime(this)
  
  date( new Date ) // 初期値は現在日時
}

object Message extends Message 
  with LongKeyedMetaMapper[Message] with CRUDify[Long, Message]{
}

DBにテーブルを勝手に作ったりしてくれるようにBoot.scalaのSchemifier#schemify()に作成したモデルを追加します。

Schemifier.schemify(true, Schemifier.infoF _, Message)

同じくBoot.scalaのSiteMapに追加。こんな感じでいいんですかね?

LiftRules.setSiteMap(SiteMap(Menu.i("Home") / "index" :: Message.menus :_*))

実行するとこんな感じになりました。

Railsのときは「scaffold最高!」みたいなハウツー的なドキュメントや記事があちこちに転がっていた記憶がありますが、LiftではCRUDifyをあまり丁寧に解説した情報は見当たらないし、自分もScalaにそんな詳しいわけではないので断片的な情報を元に試行錯誤してる感じ。コツを掴むまでしばらくはこんな感じかなぁ。