2016-11-28 2 views
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 

Проблема: Хотя запись существует, ошибка не появляется.

Что я делаю неправильно?

+0

'Цепочка фильтров остановлена ​​как: login_check визуализирована или перенаправлена' вы видите эту ошибку? Также 'staus == 'true'' должен быть' staus.status ==' true'' –

+0

Я думаю, что проблема в 'success: function (staus) {', ** status ** относится к целым данным, возвращаемым рельсами т.е. '{status:" true "}' поэтому в вашем коде 'if (staus == 'true') {' оценивается как false. вам нужно 'if (staus.status == 'true') {' или переименовать 'function (staus)' to 'function (data)' и использовать как 'data.status' – Sajan

+0

@ Зелёный Nice pointer! Я ошибался в этой ошибке. Ты прав. Я должен добавить 'skip_before_filter: login_check' к этому контроллеру, а также изменить 'status ==' true''' status.status == 'true''. Теперь работает нормально. Благодаря! – Pavan

ответ

1

Проблема в ошибке Filter chain halted as :login_check rendered or redirected выглядит как ошибка аутентификации. Также staus == 'true' должен быть staus.status == 'true' в соответствии с вашим кодом действия.

Смежные вопросы