2012-10-15 2 views
8

Play 프레임 워크와 mongoDB를 사용하여 스칼라 애플리케이션을 만들고 있습니다. 나는 Leon Play-Salat을 사용하여 연결을 관리한다. 나는 형태Play framework 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)) 

어떻게 폼에 OBJECTID를 매핑 할에 매핑 할 필요가 모델 내 컨트롤러에서

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

있나요? ObjectId에 대해 오류 개체를 찾을 수 없습니다.

+0

처음이다. 그렇지 않으면 필드가 몽고의 기본 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)) 

작업 얻을 관리 할 수 ​​있습니다. 자신의 생성자와 deconstructor을 사용하여 찾을 수

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