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にそんな詳しいわけではないので断片的な情報を元に試行錯誤してる感じ。コツを掴むまでしばらくはこんな感じかなぁ。

Lift in Action

Liftはネットでも断片的な情報が多く、最新の情報をカバーしたまとまったドキュメントが欲しいなぁと思っていたのですが、ManningからLift in Actionが出るみたいです。

Amazon.co.jpによると8月下旬発売となっていますが、Manningのサイトでは7月に出ることになっています。少し先ですが、現在Early Access Programをやっているようです。

Early Access Programで購入すれば早期に読めるうえに(現時点では後半の一部の章がまだできていないみたいですが)、完成版の書籍も入手することができます。価格はあとから書籍を購入するのと変わらないので待ちきれない方やすぐに必要な方はEarly Access Programでの購入を検討されてみてはいかがでしょうか。

CRUDifyのフィールドのカスタマイズ

CRUDifyでCRUD操作はできるようになったので、次は自動生成されるフィールドをカスタマイズしてみます。
まず、フィールドの表示名を日本語にしてみます。displayNameをオーバーライドすればいいみたい。

object username extends MappedString(this, 10){
  override def displayName = "ユーザ名"
}

入力チェックをしてみます。validationsをオーバーライドします。こんな感じ?

object username extends MappedString(this, 10){
  override def validations =
    valMinLen(1, "ユーザ名を入力してください") _ :: 
    valMaxLen(10 , "ユーザ名は10文字以内です") _ :: Nil
}

一覧画面に表示されるView、Edit、DeleteのリンクやフォームについてるSaveボタンとかのラベルを変えるにはどうすればいいんだろう…?