2012-10-15 10 views
8

私はPlayフレームワークとmongoDBを使用してスカラアプリケーションを作成しています。私はLeon Play-Salatを使って接続を管理しています。私は、フォームにオブジェクトIDをマッピングするにはどうすればよい形にPlayフレームワークLeon Salatモデルフォームマッピング

val personForm: Form[Person] = Form(

// Defines a mapping that will handle Contact values 
mapping(
    "id" -> of[ObjectId], 
    "fname" -> nonEmptyText, 
    "mname" -> text, 
    "lname" -> nonEmptyText  
)(Person.apply)(Person.unapply)) 

それをマッピングする必要があり、私のコントローラでモデル

case class Person(
    id: ObjectId = new ObjectId, 
    fname: String, 
    mname: String, 
    lname: String 
) 

がありますか? ObjectIdのObjectが見つかりません。

+0

ファーストです。そうしないと、フィールドはmongoのデフォルトのidフィールドにマップされません。 エラーのスタックトレースを貼り付けると、エラーが発生したときに明確ではないので、役立つと思います。 – Rajish

+0

一方、 'id'フィールドを' ObjectID'よりも人間が読めるタイプでない限り、フォーム上の 'id'フィールドを明らかにすることはそれほど有用ではありません。 – Rajish

+0

私は、読み取りと編集機能のIDが必要です。新しいフォームでは、IDはMongodbによって自動的に生成されます。 – William

答えて

3

は、このようにIDが必要になり、私はCRUD機能をやろうとしていることが

val personForm: Form[Person] = Form(
// Defines a mapping that will handle Contact values 
mapping(
    "id" -> ignored(new ObjectId), 
    "fname" -> nonEmptyText, 
    "mname" -> text, 
    "lname" -> nonEmptyText  
)(Person.apply)(Person.unapply)) 

の作業を取得するために管理します。自身のコンストラクタとデコンストラクタを使用して見つかった

2

あなたは `@Key( "_ ID")`と `id`フィールドに注釈を付けるために持っているすべてのより良い

val personForm: Form[Person] = Form(
    mapping(
    "fname" -> nonEmptyText, 
    "mname" -> text, 
    "lname" -> nonEmptyText 
)((fname, mname, lname) => Person(new ObjectId, fname, mname, lname)) 
    ((person: Person) => Some((person.fname, person.mname, person.lname)))  ) 
関連する問題