1

データベース内のデータを更新するためのRESTfulメソッドを作成しようとしています。PlayでScalaを使用しています。フレームワーク。アプリケーションというモデルがあり、データベース内のアプリケーションを更新できるようにしたいと考えています。したがって、putリクエストには、更新するアプリケーションのIDと、更新するオプションのプロパティのみが必要です。

だから私のルートではこれがあります:

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

私が現在持っている方法はこれです:

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

上記の方法では、リクエストとアプリオブジェクトをマップインスタンスとしてループし、モデルを使用して更新するアプリモデルを更新しています。リクエスト文字列をマップとして作成し、オブジェクトを反復処理する方が簡単な方法があることはわかっていますが、学習目的でこの方法を使用しています。私は初めてPlay!Scala、わずか1週間です。

そのように動的に変数を使用してプロパティを設定する方法はありますか?ループの最後にある上記のメソッドでは、でオブジェクトのプロパティを更新する方法ですGroovy。だから私はScalaで同等のものを探しています。Scalaがこれを実行できない場合、このタスクを実行するための最善の方法は何ですか?Reflection?物事を過度に複雑にしたくない

4

1 に答える 1

1

遊ぶ!ケースクラスのとメソッドplay.api.data.Formsを使用するフォームを作成できるようにするを提供します。次に、を呼び出して、初期状態でフォームを作成し、リクエストパラメータでフォームを更新し、更新されたフィールドで新しいインスタンスを取得できます。apply()unapply()form.fill(app)bindFromRequest(request)get()

フォームを1回だけ定義します。

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

次に、コントローラーで:

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

ドキュメントからの複雑なオブジェクトの構築を確認してください。

于 2013-04-13T01:45:58.767 に答える