CRUDifyでリレーション

CRUDifyでリレーションを持つモデルの操作を行ってみます。親モデルはこんな感じ。

package code.model

import _root_.net.liftweb.mapper._

class Dept extends LongKeyedMapper[Dept] with IdPK {
  def getSingleton = Dept
  object deptName extends MappedString(this, 20)
}

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

このモデルに多対一の関係を持つ以下のようなモデルを定義します。DeptとのリレーションはMappedLongForeignKeyで表し、CRUDifyでDeptを選択できるようにするためにvalidSelectValuesをオーバーライドしています。これによってプルダウンでDeptを選択できるようになります。

package code.model

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

class Emp extends LongKeyedMapper[Emp] with IdPK {
  def getSingleton = Emp
  object empName extends MappedString(this, 20)
  object dept extends MappedLongForeignKey(this, Dept){
    override def dbIndexed_? = true
    override def validSelectValues =
      Full(Dept.findAll.map{dept => (dept.id.is, dept.deptName.is)})
  }
}

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

こんな感じになりました。