2013-03-15 2 views
1

데이터베이스의 데이터를 업데이트하는 데 편리한 방법을 만들고 있는데, Scala on Play를 사용하고 있습니다! 뼈대. Application이라는 모델이 있는데 데이터베이스의 응용 프로그램을 업데이트 할 수 있어야합니다. 따라서 put 요청에는 업데이트 할 응용 프로그램의 ID와 업데이트 할 선택적 속성 만 필요합니다. 내가 요청과 같은 응용 프로그램 객체를 통해 반복하고 위의 방법scala에서 변수 값을 사용하여 개체의 속성을 설정하십시오.

def update_application(id: Long) = Action { implicit request => 
     var app = Application.find(id) 
     for((key, value) <- request.queryString) { 
      app."$key" = value(0) 
      //app.name = value(0) 
     } 
     val update = Application.update(id, app) 
     Ok(generate(
      Map(
       "status" -> "success", 
       "data" -> update 
      ) 
     )).as("application/json") 
    } 

:

PUT  /v1/auth/application  controllers.Auth.update_application(id: Long) 

나는 현재이 방법은 이것이다 : 내 경로에 따라서

나는이 있습니다 지도 인스턴스를 만든 다음 모델을 사용하여 업데이트 할 앱 모델을 업데이트합니다. 더 쉬운 방법은지도로 요청 문자열을 만들고 객체를 반복하는 것입니다.하지만 학습 목적으로이 방법을 사용하고 있습니다. 나는 Play!Scala으로 간신히 일주일 정도.

변수를 동적으로 사용하여 속성을 설정하는 방법이 있습니까? 루프의 끝 부분에있는 위의 메서드에서 객체의 속성을 업데이트하는 방법은 입니다. 그래서 나는 스칼라에서 이에 상응하는 것을 찾고있다. 스칼라가이를 수행 할 수 없다면,이 작업을 수행하는 최선의 방법은 무엇입니까? Reflection? 과도하게 복잡하게하고 싶지 않다.

답변

1

Play! 사례 클래스의 apply()unapply() 메서드를 사용하는 양식을 만들 수있는 play.api.data.Forms을 제공합니다. 그런 다음 form.fill(app)으로 전화하여 초기 상태 인 bindFromRequest(request) 양식을 요청 매개 변수로 업데이트하고 get()을 사용하여 업데이트 된 필드로 새 인스턴스를 가져올 수 있습니다.

한 번만 양식을 정의합니다

다음
val appForm = Form(
    mapping(
    "field1" -> text, 
    "field2" -> number 
)(Application.apply)(Application.unapply) 
) 

컨트롤러에서 : 문서 밖으로 Constructing complex objects

val app = appForm.fill(Application.find(id)).bindFromRequest(request).get 
val update = Application.update(id, app) 

확인합니다.

관련 문제