2012-08-11 15 views
0

我有一个简单的消息表单(:name,:title,:body),它有一个recaptcha。当我在同一页面上同时使用我的表单和recaptcha时,我得不到相同的用户体验,因为我的服务器端表单模型验证不起作用,因为我希望它们能够正常工作。所以我想在表单属性保存到我的数据库之前实现重定向到一个单独的recaptcha页面。Rails 3 - 提交表单前人工检查

我想知道这种情况的最佳做法是什么?我应该将消息属性的会话发送给处理recaptcha的另一个控制器吗?如果是这样的话,我在如何解决这个问题上有点失落。有任何想法吗?

+0

我不确定我明白为什么在同一页面上使用recaptcha会混淆模型验证。 recaptcha输入不应该首先发送到模型。 – sgrif 2012-08-11 23:32:40

回答

1

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

0: before recaptcha 
1: after successful recaptcha 

因此,当用户第一次提交表单时,一个新的消息与0一个submission_step实例,验证运行并假设他们通过“uncaptcha'd”消息创建。用户然后被发送到recaptcha页面。如果他们成功完成了recaptcha,则更新记录以将submission_step属性更改为1

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

当然这会在数据库中为尚未通过recaptcha步骤的表单创建记录,这可能是一个问题 - 尽管您可以定期清除它们。但是我发现这是一个相当干净的解决方案,如果您希望将来在此过程中添加其他步骤,则可以轻松实现。

+0

很好的答案。非常感谢您的回复! – jbearden 2012-08-11 23:45:54

+0

你非常欢迎,很高兴有帮助。 – 2012-08-11 23:50:37

+0

我做了你所说的有关submission_step整数和使用邪恶向导的步骤。现在很棒!再次感谢 – jbearden 2012-08-12 01:13:55