Rails 3 - 在表单提交人工检查之前

时间:2012-08-11 22:46:49

标签: ruby-on-rails ruby-on-rails-3 forms session

我有一个简单的消息表单(:name,:title,:body),它有一个recaptcha。当我在同一页面上同时使用我的表单和重新访问时,我得不到相同的用户体验,因为我的服务器端表单模型验证不像我想的那样工作。所以我想在将表单属性保存到我的数据库之前,实现重定向到单独的recaptcha页面。

我想知道这种情况的最佳做法是什么?我应该将消息属性的会话发送到另一个处理recaptcha的控制器吗?如果是这样的话,我对如何解决这个问题感到有些迷茫。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

另一种方法是创建一个额外的模型属性,一个名为submission_step的整数,其值与用户在提交过程中所处的步骤相对应。在这种情况下,只有两个:

0: before recaptcha
1: after successful recaptcha

因此,当用户首次提交表单时,将使用submission_step 0实例化新消息,运行验证并假设它们通过了“uncaptcha'd”消息。然后向用户发送recaptcha页面。如果他们成功进行了重新接收,则会更新记录以将submission_step属性更改为1

然后,您可以使用submission_step作为范围来过滤已通过重新执行步骤的表单。您还可以使用:if中的:unlessvalidate条件选项,根据步骤进行验证。

当然,这会在数据库中为尚未通过重新执行步骤的表单创建记录,这可能是一个问题 - 尽管您可以定期清除它们。但我发现它是一个相当干净的解决方案,如果你想在将来为这个过程添加额外的步骤,那就很容易了。