【问题标题】:Rails 3 - Before form submission human checkRails 3 - 在提交表单之前进行人工检查
【发布时间】:2012-08-08 17:39:45
【问题描述】:

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

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

【问题讨论】:

  • 我不确定我是否理解为什么在同一页面上显示 recaptcha 会影响您的模型验证。 recaptcha 输入不应该首先发送到模型。

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


【解决方案1】:

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

0: before recaptcha
1: after successful recaptcha

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

然后您可以使用submission_step 作为范围来过滤已通过recaptcha 步骤的表单。您还可以使用validate 中的:if:unless 条件选项基于步骤进行验证。

当然,这会在数据库中为未通过 recaptcha 步骤的表单创建记录,这可能是个问题——尽管您可以定期清除它们。但我发现这是一个相当干净的解决方案,如果您以后想在流程中添加额外的步骤,它会变得很容易。

【讨论】:

  • 很好的答案。非常感谢您的回复!
  • 我按照您所说的有关 submit_step 整数的方式执行了步骤,并使用了 Wicked Wizard 来执行这些步骤。现在工作真棒!再次感谢
  • 哦不知道邪恶巫师,看起来很有趣。
猜你喜欢
  • 2016-07-23
  • 2015-02-24
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
相关资源
最近更新 更多