我创建了自己的验证,使用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
},
也尝试了
它不断地告诉我,电子邮件不是唯一的。
我认为,我在我的自定义验证方法中发送的是真实的。
我的错误在哪里?
答案 0 :(得分:0)
如果表单值有效,则该方法应返回true
。您的方法返回整个JSON对象,而不仅仅是data->status
。因为如果找到电子邮件,你的checkemail函数会返回true
,那么你的方法应该返回!data->status
来反转它。最后,当电子邮件是唯一的时,你的checkemail函数不会返回任何对象;您需要else
子句才能返回: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