Я настраивал REST API в Play Framework (2,6) в Scala и пытался реализовать использование (Scala) Форма, но у меня возникают некоторые трудности при попытке найти лучший способ обновления только значений, которые изменились при отправке формы. Я использовал этот статья в качестве ссылки (а также другие), и он использует HTTP-запросPATCH, показанный как нечто похожее на это с файлом Маршруты:
PATCH /update/:collName controllers.IndexC.update(collName: String, oId: Option[BSONObjectID])
Однако, если я перейду к этому в моем шаблоне (Играть) для форма действия следующим образом:
@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 делает это неактуальным. Большое спасибо.
@cchantep - Я не совсем уверен, что вы имеете в виду (возможно, это опечатка), но если вы хотели сказать: «Такая привязка формы не должна быть осведомленный базы данных» - тогда это не так. Но, конечно, это не решает проблему. Разумеется, любое понимание всегда приветствуется. Спасибо
@cchantep - есть ли у вас опыт обновления только измененных значений из формы scala? Мне становится все труднее получать какие-либо ответы в Переполнение стека. Возможно, есть лучший форум или место для обмена знаниями (в частности, по Play Framework / Scala / Reactive Mongo). Предложения приветствуются

У объекта типа Form всегда будет что-то для каждого поля в форме (или, конечно, None, если они являются необязательными). Тег формы на странице (и его входные данные) определяет, какие объекты включаются в почтовый запрос http. bindFromRequest сопоставит имена полей ввода html с полями в классе case формы (грубо говоря). Таким образом, нет автоматического способа обнаружить только измененные поля. Тем не менее, интересный вариант использования.
Мысли вслух:
bindFromRequest, какие из них имеют значения. Используйте эту информацию для создания обновления БД, содержащего только эти поля. Во внешнем интерфейсе заполняйте только те входные данные, которые были изменены. Вам, вероятно, понадобится видимый ввод, который не является частью формы, а затем ваш специальный необязательный ввод, который является частью формы и, следовательно, частью POST.hasChanged<Field1>, hasChanged<Field2> (или их Seq), которые пользовательский интерфейс устанавливает при обнаружении изменений. Объект Form будет отображаться в этот новый класс case, а в bindFromRequest вы можете использовать логические значения для разумного создания только измененных полей, которые будут отправляться в базу данных.bindFromRequest сравните это с кэшированным значением и создайте список измененных полей.bindFromRequest на использование Ajax. Во внешнем интерфейсе создайте объект POST, который будет содержать только измененные поля. В контроллере используйте чтение JSON, где все поля класса дела являются параметрами (ReadNullable). Затем контроллер может определить, какие из них заполнены, на основе того, какие из них присутствуют в JSON.
Такая привязка формы не должна быть присуждена БД в отношении основ MVC.