2016-07-28 7 views
0

Ich versuche, das Front-End meiner Anwendung zu validieren. Ich habe Probleme mit dem Ajax-Anruf, den ich verwende, um herauszufinden, ob der Benutzer eine eindeutige E-Mail-Nachricht sendet.AJAX-Eindeutigkeitsprüfung funktioniert nicht auf Schienen App

Mein 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); 

Mein Controller:

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

die 'Fehler' Nachricht selbst hält, die durch, wenn eine neue E-Mail gesetzt. Ich bin mir nicht sicher, wie ich es beheben kann.

Antwort

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

Sieht aus wie wenn die E-Mail vorhanden ist, dann Sie eine 'SUCCESS' bekommen.

Sonst würden Sie die 'ERROR' bekommen.

Die Meldung 'FEHLER' wird auch dann durchgelassen, wenn eine neue E-Mail eingerichtet wird. Ich bin mir nicht sicher, wie ich es beheben kann.

Nun ja ... wenn eine E-Mail nicht gefunden wird, dann haben Sie 'ERROR' erreicht.

+0

Das einzige, was potenziell in das Modell verschoben werden könnte, ist ein Bereich, der Benutzer mit einer bestimmten E-Mail zurückgibt, aber angesichts der Tatsache, dass es einfach so oder über einen Finder ist, scheint es zu diesem Zeitpunkt nicht wert. Sie müssen trotzdem immer noch nach einer DuPe-E-Mail in der Validierung suchen, aber eine Plausibilitätsprüfung über Ajax scheint völlig in Ordnung zu sein, und Sie brauchen eine Controller-Aktion, um das zu tun. Nichts ist schwierig über Ajax über REST, nicht sicher, was Sie dort kommunizieren möchten. –

+0

(Eigentlich, den Code wieder lesend, ist es nicht sofort offensichtlich, was passiert: Ich hatte angenommen, dies war eine Vorabüberprüfung, aber wenn es ist, wird es hier nicht gezeigt, also nichts gegen diesen Teil meines Kommentars.) –

+0

Hahaha ! Die Verwendung einer 'email_uniqueness'-Aktion ist meiner Meinung nach nicht sehr RESTful. Die Validierung einzelner Felder kann nur mit 'create' und' update' und unter Verwendung der Modellvalidierung erreicht werden. – fbelanger

Verwandte Themen