我有一个简单的消息表单(:name,:title,:body),它有一个recaptcha。当我在同一页面上同时拥有我的表单和recaptcha 时,我不会获得相同的用户体验,因为我的服务器端表单模型验证不像我希望的那样工作。所以我正在考虑在表单属性保存到我的数据库之前实现重定向到一个单独的 recaptcha 页面。
我想知道这种情况的最佳做法是什么?我应该将消息属性的会话发送到另一个处理 recaptcha 的控制器吗?如果是这样的话,我对如何去做有点迷茫。有任何想法吗?
我有一个简单的消息表单(:name,:title,:body),它有一个recaptcha。当我在同一页面上同时拥有我的表单和recaptcha 时,我不会获得相同的用户体验,因为我的服务器端表单模型验证不像我希望的那样工作。所以我正在考虑在表单属性保存到我的数据库之前实现重定向到一个单独的 recaptcha 页面。
我想知道这种情况的最佳做法是什么?我应该将消息属性的会话发送到另一个处理 recaptcha 的控制器吗?如果是这样的话,我对如何去做有点迷茫。有任何想法吗?
另一种方法是创建一个额外的模型属性,一个名称为 的整数submission_step
,其值对应于用户在提交过程中到达的步骤。在这种情况下,只有两个:
0: before recaptcha
1: after successful recaptcha
submission_step
因此,当用户首次提交表单时,会使用of实例化一条新消息0
,运行验证并假设它们通过了“uncaptcha'd”消息。然后向用户发送recaptcha 页面。如果他们成功进行了 recaptcha,则更新记录以将submission_step
属性更改为1
.
然后,您可以将其submission_step
用作过滤已通过 recaptcha 步骤的表单的范围。:if
您还可以使用 中的或:unless
条件选项基于步骤进行验证validate
。
当然,这会在数据库中为尚未通过 recaptcha 步骤的表单创建记录,这可能是一个问题——尽管您可以定期清除它们。但是我发现它是一个相当干净的解决方案,如果您想在将来向该过程添加其他步骤,它会变得很容易。