0

簡単なメッセージ フォーム (:name、:title、:body) があり、recaptcha があります。フォームと recaptcha の両方が同じページにある場合、サーバー側のフォーム モデルの検証が思いどおりに機能しないため、同じユーザー エクスペリエンスが得られません。そのため、フォーム属性がデータベースに保存される前に、別の recaptcha ページへのリダイレクトを実装することを考えていました。

この状況のベストプラクティスは何ですか?メッセージ属性のセッションを、recaptcha を処理する別のコントローラーに送信する必要がありますか? もしそうなら、私はそれについてどうするかについて少し迷っています。何か案は?

4

1 に答える 1

1

これを行う別の方法は、追加のモデル属性 ( のような名前の整数) を作成することです。submission_step値は、送信プロセスでユーザーが到達したステップに対応します。この場合、次の 2 つだけです。

0: before recaptcha
1: after successful recaptcha

したがって、ユーザーが最初にフォームを送信すると、新しいメッセージがsubmission_stepofでインスタンス化され0、検証が実行され、「キャプチャされていない」メッセージに合格したと仮定してメッセージが作成されます。次に、ユーザーに recaptcha ページが送信されます。recaptcha が正常に実行されると、レコードが更新され、submission_step属性がに変更されます1

次にsubmission_step、スコープとして使用して、recaptcha ステップを通過したフォームをフィルタリングできます。:ifまたはの:unless条件付きオプションを使用して、ステップに基づいて検証することもできますvalidate

もちろん、これにより、recaptcha ステップを通過していないフォームのレコードがデータベースに作成されます。これは問題になる可能性がありますが、定期的に削除することはできます。しかし、これはかなりクリーンなソリューションであり、将来プロセスに追加のステップを追加したい場合に簡単になることがわかりました.

于 2012-08-11T23:36:41.507 に答える