ユーザーが入力した電子メールが一意かどうかをテストするための効率的な非同期メソッドを見つけるのに苦労しています。ユーザーがフォームを送信する前にポップアップを表示したいので、コントローラー内で検証を使用したくありません。
私は基本的に User.find(:all, :conditions => ["email == ?", current_user.email]) を実行しようとしていますが、HTML ページの JavaScript 内からです。
ユーザーが入力した電子メールが一意かどうかをテストするための効率的な非同期メソッドを見つけるのに苦労しています。ユーザーがフォームを送信する前にポップアップを表示したいので、コントローラー内で検証を使用したくありません。
私は基本的に User.find(:all, :conditions => ["email == ?", current_user.email]) を実行しようとしていますが、HTML ページの JavaScript 内からです。
次のようなものが必要です。
unique = (User.find(:all, :conditions => ["email == ?", current_user.email])).length == 0
。次のような JSON を返すようにしますrender json: unique
。ビューは必要ありません。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 }
それが役に立てば幸い。