Игровой фреймворк Леон Салат Модель Картирование форм

Я создаю приложение Scala, используя платформу Play и mongoDB. Мне удается установить связи с помощью Leon Play-Salat. У меня есть модель

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

В моем контроллере мне нужно сопоставить его с формой

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

Как сопоставить ObjectID с формой? Я получаю сообщение об ошибке "Объект не найден для идентификатора объекта".


person William    schedule 15.10.2012    source источник
comment
Прежде всего, вы должны аннотировать поле id с помощью @Key("_id"). В противном случае поле не будет сопоставлено с полем идентификатора mongo по умолчанию. Я думаю, что это поможет, если вы вставите трассировку стека ошибки, потому что неясно, когда возникает ошибка.   -  person Rajish    schedule 16.10.2012
comment
С другой стороны, не очень полезно раскрывать поле id в форме, если оно не относится к типу, более удобочитаемому, чем ObjectID.   -  person Rajish    schedule 16.10.2012
comment
Мне нужен идентификатор для функции чтения и редактирования. В новой форме идентификатор должен автоматически генерироваться Mongodb.   -  person William    schedule 16.10.2012


Ответы (2)


Успей заставить его работать

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

Я пытаюсь выполнить функцию CRUD, поэтому мне нужен идентификатор.

person William    schedule 16.10.2012

Найдено с использованием собственного конструктора и деконструктора лучше

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)))      )
person William    schedule 18.10.2012