我怎么能知道电子邮件是动态复制的呢

How can I know email is duplicated with devise dynamically

本文关键字:动态 复制 电子邮件 怎么能      更新时间:2023-09-26

我用设备制作了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');
    }
})

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

例如,在用户控制器中创建一个函数,该函数接受一个参数(电子邮件)并返回一个布尔值。然后可以使用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编写代码。所以我用宝石做了。这是我的密码。

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放在一起。这个控制器是用设备签名的。所以我把它放在new方法中

registrations_controller.rb

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

有关"gon"的更多解释,请阅读本页。