2012-10-15 8 views
8

Sto creando un'applicazione scala usando Play framework e mongoDB. Riesco ad avere le connessioni usando Leon Play-Salat. Ho un modelloPlay framework Leon Salat Model Form Mapping

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

Nel mio controller ho bisogno di farlo corrispondere ad una forma

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

Come faccio a mappare l'IDOggetto alla forma? Ricevo l'errore Object non trovato per ObjectId.

+0

Prima di tutto si deve annotare il campo '' id' con @key ("_ id") '. Altrimenti il ​​campo non verrà mappato sul campo ID predefinito di mongo. Penso che sarebbe d'aiuto se hai incollato la traccia dello stack dell'errore, perché non è chiaro quando si verifica l'errore. – Rajish

+0

D'altra parte non è molto utile rivelare il campo 'id' su un modulo a meno che non sia di un tipo più leggibile dall'essere umano di 'ObjectID'. – Rajish

+0

Ho bisogno dell'ID per la funzione di lettura e modifica. Sul nuovo modulo l'ID dovrebbe essere generato automaticamente da Mongodb. – William

risposta

3

riescono a farlo funzionare

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

Sto cercando di fare una funzione CRUD quindi necessiterà l'ID.

2

Trovato utilizzando proprio costruttore e decostruttore è meglio

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