0

play 2.0 フレームワークのフォーム バインディングを、circumflex-orm ( website )から 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 を Some に置き換えると、次のようになります。

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 で必要な依存関係を含む単純なプロジェクトを作成しました。役立つ場合は、ここからダウンロードして参照してください。 基本的なフォームの例

4

2 に答える 2

2

次のスニペットは私のために機能します。

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)))

アップデート

依存関係にサーカムフレックスを追加し、正確な例を試しました。それは私のためにうまくコンパイルされます、私はちょうど追加しました

object Task extends Task with Table[Long, Task]

質問にそれを含めるのを忘れていると思います。したがって、プロジェクト全体をクリーンアップして再構築することしか提案できません。

PSと私はラインを変更しました

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

しかし、それは明らかです。

于 2012-04-19T17:31:08.123 に答える
0

主な問題は、サーカムフレックスを使用する場合、ケース クラスを記述しないため、デフォルトで適用および適用解除メソッドがないことです。

次のように、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())
    }
于 2012-08-14T10:05:29.803 に答える