ScalaQuery 0.9.5 で Play 2.0.2 を使用しています。
次の単純なモデル コードがあります。
case class Task(id: Long, name: String)
object Task extends Table[(Long, String)]("task") {
lazy val database = Database.forDataSource(DB.getDataSource())
def id = column[Long]("id", O PrimaryKey, O AutoInc)
def name = column[String]("name", O NotNull)
def create(task: Task) = database.withSession {
implicit db: Session => {
Task.name insert(task.name)
}
}
そして、フォーム送信を処理するための次のコード:
val taskForm: Form[Task] = Form(
mapping(
"name" -> nonEmptyText
) {
(name) => Task(-1L, name)
} {
task => Some(task.name)
}
)
def newTask = Action {
implicit request =>
taskForm.bindFromRequest.fold(
errors => BadRequest(views.html.index(Task.all, errors)),
task => {
Task.create(task)
Redirect(routes.Application.tasks())
}
)
}
いくつかの質問:
1)定数を渡すよりも一時的な主キー値を処理するためのより良い方法はありますか? Anorm の NotAssigned に似たものはありますか?
2) フォーム マッピングに "id" -> ignore(-1L) を追加し、タスクのエクストラクタ関数を使用する方がよいでしょうか?
3) id フィールドなしでケース クラスを定義する必要がありますか?