我怎么知道电子邮件被动态设计复制了

How can I know email is duplicated with devise dynamically

我设计了sign_up page。在此页面中,可以检查输入的电子邮件是否有效。它像这样用 jQuery 动态输出消息。

// Output_email-message dynamically
$('#user_email').focusin(function () {
    $('#user_email').keyup(function () {
        $('#output-email').text('');
    })
});
$('#user_email').focusout(function () {
    $('#output-email').removeClass('field-output-comple').addClass('field-output');
    if ($('#user_email').val().length < 1) {
        $('#output-email').text('<%= t 'devise.registrations.output_email_blank' %>');
    } else if (!isValidEmailAddress($('#user_email').val())) {
        $('#output-email').text('<%= t 'devise.registrations.output_email_uncomple' %>');
    } else {
        $('#output-email').text('<%= t 'devise.registrations.output_email_comple' %>');
        $('#output-email').removeClass('field-output').addClass('field-output-comple');
    }
})

但是我不知道如何动态检查这个输入的电子邮件是否重复。有什么功能可以在设计中有用吗?感谢阅读。

例如在您的用户控制器中创建一个函数,该函数接受一个参数(电子邮件)和 returns 一个布尔值。然后可以使用 JQuery 通过 ajax 访问此功能,然后显示。

def check_email
  return User.find_by(:email => params[:email]) ? true : false
end

并在你的路线中添加

get '/users/:email' => 'users#check_email', :defaults => { :format => 'json' }

然后在您的验证电子邮件功能中发送一个 ajax 请求来检查电子邮件。

$.get('/users/'+$('#user_email').text(), function(data){
  // Print to html
});

我不知道如何用 ajax 编码。所以我用 gem gon 做了。这是我的代码。

new.html.erb

else if (!isDuplicateEmail($('#user_email').val())) {
            $('#output-email').text('<%= t 'devise.registrations.output_email_duplicate' %>');
        }

function isDuplicateEmail(emailAddress) {
    if ($.inArray(emailAddress, gon.emails) == -1) {
        return true
    } return false
}

并且在您的控制器中,您应该将您的变量放入 gon。这个控制器是 sign_up 设计的。所以我把它放在 new 方法

registrations_controller.rb

def new
    gon.emails = User.pluck(:email)
    puts 'indexr'
    puts gon.emails
    super
end

有关 'gon' 的更多解释,请阅读 this page