0

我创建了自己的验证,使用 json - 如果用户电子邮件不是唯一的,则操作发送响应。这是行动:

def checkemail
 respond_to do |format|
  format.jsonr do
    if User.where(email: params[:email]).exists? 
      render :json => {
            :status  => :false,
            }.to_json
    else
      render :json => {
            :status  => :true,
            }.to_json
     end
    end
  end
end

第二种变体(不知道怎么用

   def checkemail
   render :nothing
    if User.where(email: params[:email]).exists? 
      return false
    else
      true
    end
  end

我想编写一个自定义的 jQuery 验证方法,这里是代码

   $.validator.addMethod("uniqueness", function(value) {
    $.getJSON('http://127.0.0.1:3000/checkemail.jsonr', { email: $('#email').val() }, function(data)  {
       return data.status
    });
}, 'Your email is not unique');
 .....
 "user[email]":{         //here is no error in name
    uniqueness: true
        },

也试过

它不断地告诉我电子邮件不是唯一的。

我想,我经常在我的自定义验证方法中发送 true 。

我的错误在哪里?

4

1 回答 1

0

true如果表单值有效,则该方法应返回。您的方法返回整个 JSON 对象,而不仅仅是data->status. true由于如果找到电子邮件,您的 checkemail 函数会返回,因此您的方法应该返回!data->status以反转它。最后,当电子邮件唯一时,您的 checkemail 函数不会返回任何对象;你需要一个else子句来 return :status => false

代替自定义方法,使用内置的远程验证:

"user[email]" {
  remote: {
    url: "http://127.0.0.1:3000/checkemail.jsonr",
    type: "get",
    data: {
      email: function() { return $("#email").val(); }
    }
  }
}

我认为这应该是 Ruby-on-Rails 脚本(注意:我以前从未做过 RoR,我只是基于我通过谷歌搜索找到的示例,所以我可能没有完全正确地理解语法):

def checkemail
 respond_to do |format|
  format.json do
    if User.where(email: params[:email]).exists? 
      render :json => false
    else
      render :json => true
    end
  end
end
于 2012-09-13T07:23:26.793 回答