簡體   English   中英

使用scala和circumflex-orm類在play框架2中提供自己的unapply方法

[英]provide own unapply method in play framework 2 with scala and circumflex-orm class

我想將play 2.0框架中的表單綁定與來自circumflex-orm( 網站 )的擴展Record的類結合起來。

這些是我的類對象:

class Task extends Record[Long, Task] with IdentityGenerator[Long, Task] {  
  def this(name: String, description: String) = {
    this()
    this.name := name
    this.description := description
}

  val id = "id".BIGINT.NOT_NULL.AUTO_INCREMENT
  val name = "name".VARCHAR(255).NOT_NULL
  val description = "description".TEXT.NOT_NULL

  def PRIMARY_KEY = id
  def relation = Task
}

這就是我嘗試使用游戲形式:

val taskForm: Form[Tasks] = Form(
  mapping(
    "name" -> text,
    "description" -> text
  )
  {(name, description) => Task(name, description)}
  {(t: Task) => Option(t.name(), t.description())  }
)

但我得到這樣的錯誤:

found   : models.Task => Option[(String, String)]
required: Unit => Option[(String, String)]
  {(t: Task) => Option(t.name(), t.description())}

如果我用一些替換Option:

found   : models.Task => Some[(String, String)]
required: Unit => Option[(String, String)]
  {(t: Task) => Some(t.name(), t.description())}

我現在很無能,任何提示都會受到贊賞。

非常感謝。

編輯:我做了一個基本的錯誤,我確實命名了表格:

val taskForm: Form[Tasks] = Form(

當類的名稱是“任務”時。 所以我可以改為:

val taskForm: Form[Task] = Form(
  mapping(
      "name" -> text,
      "description" -> text
  ) ( (name, description) => Task ) 
  ( (t: Task) => Option() )
)

現在我得到一個不同的錯誤:

Unspecified value parameter x
  ( (t: Task) => Option() )

我在eclipse中創建了一個帶有所需依賴項的簡單項目,你可以在這里下載並查看它,如果它有幫助: 基本表單示例

我的評論錯了,以下片段為我工作。

case class Foo(x: String, y: String)

val taskForm = Form(
  mapping(
    "name" -> text,
    "description" -> text)
  ((name, description) => Foo(name, description))
  ((t: Foo) => Some(t.x, t.y)))

更新

我將circumflex添加到依賴項並嘗試了您的確切示例。 我剛剛補充說,它對我來說很好

object Task extends Task with Table[Long, Task]

我相信你忘了將它包括在問題中。 所以我只能建議清理和重建整個項目。

PS和我換線了

{ (name, description) => new Task(name, description) }

但很明顯。

主要問題是如果使用circumflex,則不編寫case類,因此默認情況下沒有apply和unapply方法。

您必須在Task伴隨對象中編寫自己的apply和unapply方法,如下所示:

    object Taks extends Task with Table[Long, Task] {
        def apply(name:String,description:String) = {
            var t = new Task()
            t.name := name
            t.description := description
            t
        }
        def unapply(t:Task) = Some(t.name(),t.description())
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM