2012-08-11 46 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