0
Я пытаюсь вызвать метод с AJAX который проверяет дубликата электронной почты. Ниже мой кодНе удается получить проверку дублирования работы с AJAX в рельсах
#users_controller.rb
def check_email
email = User.find_by(email: params[:email]) #record exists
if email
#return true
render :json => { status: "true" }
else
return false
end
end
#view code
<input type="email" name="email" id="s_email" placeholder="Email"/>
<span id="duplicate_email"></span>
#jquery
$('#s_email').on('change keyup paste', function() {
var email = $('#s_email').val();
$.ajax({
url: '/users/check_email',
data: {"email": email},
type: 'GET',
dataType: 'json',
success: function(status){
if (status == 'true') {
$('#duplicate_email').text("Email Already Exists! Try Different Email");
}
}
});
});
#server log
Started GET "https://stackoverflow.com/users/check_email?email=pavan%40xyz.in" for 127.0.0.1 at 2016-11-28 11:45:02 +0530
Processing by UsersController#check_email as JSON
Parameters: {"email"=>"[email protected]"}
Redirected to http://localhost:3000/
Filter chain halted as :login_check rendered or redirected
Completed 302 Found in 0ms
Проблема: Хотя запись существует, ошибка не появляется.
Что я делаю неправильно?
'Цепочка фильтров остановлена как: login_check визуализирована или перенаправлена' вы видите эту ошибку? Также 'staus == 'true'' должен быть' staus.status ==' true'' –
Я думаю, что проблема в 'success: function (staus) {', ** status ** относится к целым данным, возвращаемым рельсами т.е. '{status:" true "}' поэтому в вашем коде 'if (staus == 'true') {' оценивается как false. вам нужно 'if (staus.status == 'true') {' или переименовать 'function (staus)' to 'function (data)' и использовать как 'data.status' – Sajan
@ Зелёный Nice pointer! Я ошибался в этой ошибке. Ты прав. Я должен добавить 'skip_before_filter: login_check' к этому контроллеру, а также изменить 'status ==' true''' status.status == 'true''. Теперь работает нормально. Благодаря! – Pavan