2016-07-28 4 views
0

私のアプリケーションのフロントエンドを検証しようとしています。ユーザーが固有の電子メールを送信しているかどうかを判断するために使用しているajax呼び出しに問題があります。AJAX一意性検証がレールアプリケーションで動作しない

マイJS:

function appendResults(data) { 
    console.log(data); 
    if(data.message=='ERROR') { 
    $("#confirmation").html(""); 
     var content = '<div class= "alert alert-danger">Este email ya se ha usado.</div>'; 
     $("#confirmation").append(content); 
    } 
    else if ($('#name').val() == '' || $('#surname').val() == '' || $('#email').val() == ''|| $('#estanco').val() == '' || $('#picture').val() == '') { 
     $("#confirmation").html(""); 
     var content = '<div class= "alert alert-danger">Debes rellenar todo el formulario.</div>'; 
     $("#confirmation").append(content); 
    } 
    else { 
     $("#confirmation").html(""); 
     var content = '<div class= "alert alert-success"><strong>Genial!</strong> Ya participas en el concurso.</div>'; 
     $("#confirmation").append(content); 
     co 
} 
} 

function handleSubmitEvent(e) { 
    var formURL = '/contestants/new'; 
    var formData = $("#email").val(); 

    $.ajax({ 
     url: formURL, 
     type: "POST", 
     data: formData, 
     dataType: 'json', 
     success: appendResults, 
     error: function() {console.log('There was an error')} 
    }); 
    console.log(formData); 
} 

function attachFormListeners(e) { 
    $('#listed').click(handleSubmitEvent); 
} 

$(document).ready(attachFormListeners); 

マイコントローラ:

def email_uniqueness 
     if Contestant.where(params[:email]).exists? 
      render json: {message: "SUCCESS"} 
     else 
      render json: {message: "ERROR"} 
     end 
    end 

'エラー' のメッセージは、新しい電子メールが設定されている場合でも通過し続けます。それを修正する方法がわからない。

答えて

0
if Contestant.where(params[:email]).exists? 
    render json: {message: "SUCCESS"} 
else 
    render json: {message: "ERROR"} 
end 

メールが存在する場合は、'SUCCESS'が表示されます。

これ以外の場合は、'ERROR'が表示されます。

新しいメールが設定されていても、「エラー」メッセージはそのまま通過します。それを修正する方法がわからない。

メールが見つからない場合は、'ERROR'に届きました。

+0

潜在的にモデルに移動する可能性のある唯一のものは、特定の電子メールでユーザーを返すスコープですが、このように、またはファインダーを介して十分に簡単なので、現時点では価値がないようです。とにかく、検証の中でdupe電子メールを確認する必要がありますが、Ajaxを介して健全性チェックを行うのは完全に合理的です。そのためにはコントローラの操作が必要です。 REST経由でAjaxを扱うのは難しいことではありませんが、あなたがそこで通信しようとしていることは不明です。 –

+0

(実際には、コードを再読して、何が起こっているのかはすぐにわかりません:私はこれが事前提出のチェックであると仮定していましたが、それがここには表示されないので、私のコメントの部分は気にしないでください) –

+0

Hahaha ! 'email_uniqueness'アクションを使用することは、私の意見ではあまりRESTfulではありません。モデル検証を使用しながら、 'create'と' update'のみを使用して、単一フィールド検証を行うことができます。 – fbelanger

関連する問題