1

我正在尝试创建一个宁静的方法来更新数据库中的数据,我在 Play 上使用 Scala!框架。我有一个名为 Application 的模型,我希望能够更新数据库中的应用程序。所以 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")
   }

在上面的方法中,我将请求和应用对象作为地图实例进行循环,然后使用模型更新要更新的应用模型。我知道有一种更简单的方法是将请求字符串创建为映射并仅遍历对象,但我这样做是为了学习目的。我是 and 的新手Play!Scala刚接触一周。

有没有办法以这种方式动态地使用变量设置属性?在循环结束的上述方法中,我将如何在Groovy. 所以我正在寻找 Scala 中的等价物。如果 Scala 不能做到这一点,那么完成这项任务的最佳方法是什么?Reflection? 我不想让事情过于复杂

4

1 回答 1

1

玩!提供了play.api.data.Forms它允许创建一个使用案例类的apply()和方法的表单。unapply()然后您可以调用form.fill(app)以创建具有初始状态bindFromRequest(request)的表单,使用请求参数更新表单,并get()获取具有更新字段的新实例。

只定义一次表单:

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)

查看文档中的Constructing complex objects

于 2013-04-13T01:45:58.767 回答