提交表单时弹出/模态,取决于表单中输入的信息

Popup / modal when submitting a form, depending on what information has been entered into the form

我正在寻找有关在 Ruby/Rails 中提交表单时实现弹出窗口/模式的最佳方法的建议。

我有一个简单的表单,带有一个提交按钮,按预期工作(更新数据库中的相关字段)。

我得到了额外的要求:根据输入到表单中的信息,提交表单时应该有一个模式/弹出窗口。对此的不同要求概述如下:

  1. 当更新了某些字段但信息与之前的更新冲突时(例如,更新了日期字段,但之前已经设置了不同的日期),弹出/模式错误将出现,当单击确定时,将 return 到表单,任何输入仍然存在(即不刷新表单)。三种不同的场景具有三种不同的错误类型,因此需要三种不同的错误消息。

  2. 当某些字段已更新但其他字段留空时,将出现带有 'Are you sure?' 类型消息的弹出窗口/模式。同样存在三种不同的场景,因此需要三种不同的消息。将有取消和确定按钮:取消将 return 到表单,任何输入仍然存在,确定将提交表单。

  3. 最后,如果表单更新没有问题(即上述 none 为真),则表单将提交时没有弹出窗口/模式(即标准表单提交).

我研究过创建模式,但由于我有七种不同的 scenarios/requirements,我正在努力寻找一种合适的方法来实现它。首先想到的是会有很多 if 语句,但我觉得必须有更有效的方法来做到这一点。我看过的代码中有几个模式(在我接手项目之前完成),它们使用 button_tag,但我不知道我是否想在中使用相同的格式一个表格。

对于第一种情况,您可以考虑在您的 ActiveRecord 模型上实施您自己的验证,https://guides.rubyonrails.org/active_record_validations.html#custom-methods。表单数据通过 AJAX 提交,检查您的 JSON 响应是否有任何错误,如果有错误则显示模态。

对于第二种情况,我会添加客户端验证。让您的 JS 在提交表单时检查字段,如果它们为空,则显示 'Are you sure?' 模式。如果他们单击 'Yes',那么我们将转到场景一检查是否有任何错误。

最后,如果表单提交成功,通过JS清除所有字段并显示成功信息。