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
'エラー' のメッセージは、新しい電子メールが設定されている場合でも通過し続けます。それを修正する方法がわからない。
潜在的にモデルに移動する可能性のある唯一のものは、特定の電子メールでユーザーを返すスコープですが、このように、またはファインダーを介して十分に簡単なので、現時点では価値がないようです。とにかく、検証の中でdupe電子メールを確認する必要がありますが、Ajaxを介して健全性チェックを行うのは完全に合理的です。そのためにはコントローラの操作が必要です。 REST経由でAjaxを扱うのは難しいことではありませんが、あなたがそこで通信しようとしていることは不明です。 –
(実際には、コードを再読して、何が起こっているのかはすぐにわかりません:私はこれが事前提出のチェックであると仮定していましたが、それがここには表示されないので、私のコメントの部分は気にしないでください) –
Hahaha ! 'email_uniqueness'アクションを使用することは、私の意見ではあまりRESTfulではありません。モデル検証を使用しながら、 'create'と' update'のみを使用して、単一フィールド検証を行うことができます。 – fbelanger