【发布时间】:2023-03-31 06:00:02
【问题描述】:
我一直在 Scala 的 Play Framework (2.6) 中设置 REST API 和一直在尝试实现 (Scala) Form 的使用,但是在尝试找到仅更新表单提交时已更改的值的最佳实践时遇到了一些困难.我已经使用了这个article as a reference(以及其他),它使用 HTTP 请求 PATCH 与 Routes 文件类似:
PATCH /update/:collName controllers.IndexC.update(collName: String, oId: Option[BSONObjectID])
但是,如果我在我的 (Play) 模板中为 form 操作 像这样路由到这个:
@form(action = routes.IndexC.update(collName, oId), 'method -> "patch", ...)
然后它会出现无法找到文件的错误(尝试使用GET
要求)。我在某处读到如果浏览器不支持PATCH 作为HTTP 请求,就会发生这种情况。或者我完全误解了这一点 - 我们将其称为 我的知识差距的第 1 部分。
另外(我的知识差距的第 2 部分)我很难理解如何只能检索来自表单提交的值(而不是所有输入框值)。所以假设我有一个非常简单的 Scala 模型和表单,如下所示:
case class Countries(countryName: String, countryCode: String, currencyCode: String)
object Countries {
val form = Form(
mapping(
"countryName" -> nonEmptyText,
"countryCode" -> nonEmptyText,
"currencyCode" -> nonEmptyText
)(Countries.apply)(Countries.unapply)
)
}
有没有一种方法bindFromRequest 可以帮助检索那些已更改的输入值(来自 Mongo 数据库集合 以及最初输入表单的那些 - 使用 Countries.form.fill)。或者这也许在其他地方用更明智的方法做得更好?或者,第 1 部分 的解决方案可能使这无关紧要。非常感谢。
【问题讨论】:
-
就 MVC 基础而言,这种表单绑定不应该是 DB 的奖励
-
@cchantep - 我不确定你的意思(可能是错字),但如果你想说:“这种表单绑定不应该意识到 DB”——那么它不是。但这当然不能解决问题。当然,任何见解总是受欢迎的。谢谢
-
@cchantep - 您是否有任何仅从 Scala 表单更新修改值的经验?我发现在 Stack Overflow 中获得任何答案越来越困难。也许有更好的论坛或地方来分享知识(特别是 Play Framework/Scala/Reactive Mongo)。欢迎提出建议
标签: mongodb scala playframework httprequest insert-update