0

ユーザーが入力した電子メールが一意かどうかをテストするための効率的な非同期メソッドを見つけるのに苦労しています。ユーザーがフォームを送信する前にポップアップを表示したいので、コントローラー内で検証を使用したくありません。

私は基本的に User.find(:all, :conditions => ["email == ?", current_user.email]) を実行しようとしていますが、HTML ページの JavaScript 内からです。

4

1 に答える 1

0

次のようなものが必要です。

  • のように、メールの一意性をチェックするコントローラーのメソッドunique = (User.find(:all, :conditions => ["email == ?", current_user.email])).length == 0。次のような JSON を返すようにしますrender json: unique。ビューは必要ありません。
  • そのメソッドへのルート。
  • 上記のルートにメールを送信し、JSON ドキュメントを取得する JavaScript の関数。

jQuery を使用した未テストの例を次に示します。

function isEmailUnique(email) {
  jQuery.get('/my-controller/test-email-uniqueness', email, function(json) {
    if (json.unique) {
      // Tell the user the email is in use.
    }
  });
}

それはそれを行う必要があります。コントローラーによって返される JSON ドキュメントの構造に少し手を加える必要があります。ユーザー レコード全体を返さないでください。これにより、悪意のある人々がアクセスしてはならないものにアクセスできるようになる可能性があります。できれば次のようなものを返します{ 'email': 'user@example.com', 'unique': true }

それが役に立てば幸い。

于 2013-07-25T06:12:55.380 に答える