Приложение My Rails имеет несколько форм. Когда Джо использует мое приложение, я хочу, чтобы каждая форма предоставляла ему немедленную визуальную обратную связь относительно достоверности его ввода для каждого поля. Одно поле проверяет формат его адреса электронной почты - довольно просто. Но другой позволяет ему связать текущий ресурс с рядом других ресурсов, и применяются сложные бизнес-правила. Если форма неполная или недействительная, я хочу запретить Джо двигаться вперед, например, отключив кнопку «отправить».
Я мог бы продублировать проверки, которые появляются в моем коде Rails, написав JavaScript, который также выполняет проверку в браузере. Но это плохо пахнет - каждый раз, когда меняются бизнес-правила, мне нужно обновить их в двух местах с двумя разными языками и двумя наборами тестов.
Или я мог бы добавить один метод к контроллеру для ресурса, называемого 'validate'. Он будет принимать данные формы в запросе AJAX и возвращать ответ, который затем может быть использован внутри формы Джо для предоставления обратной связи проверки в реальном времени. В отличие от действия «создать», действие «проверить» не изменит состояние сервера. Единственная цель «проверки» - предоставить ответ проверки.
Дилемма в том, что мне не нравится добавлять действия в контроллеры RESTful в Rails. Но мне еще меньше нравится идея дублирования кода проверки в двух разных контекстах.
Я заметил этот ТАК вопрос , который затрагивает эту тему. Но меня не интересует плагин или технология. И при этом я не считаю этот вопрос обязательно Rails-специфичным. Меня больше интересует, как лучше всего решать подобные проблемы в веб-приложении.
Я также замечаю этот вопрос SO , который не включает в себя ограничение поддержки архитектуры RESTful.
Учитывая необходимость динамической проверки данных формы со сложными бизнес-правилами в веб-приложении и желательность поддержания REST-подобной серверной архитектуры, каков самый чистый и наиболее поддерживаемый способ выполнения обоих одновременно?