2012-09-13 89 views
0

我創建了自己的驗證,它是使用json製作的 - 如果用戶電子郵件不是唯一的,則操作會發送回復。這裏是動作:如果自定義jQuery驗證方法正在傳遞,如何返回false?

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 
     }, 

也試過

它一直告訴我,電子郵件不是唯一的。

我想,我constanlty在我的自定義驗證方法發送true。

我的錯誤在哪裏?

回答

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的腳本(注:我從來沒有做過的回報率,我米只是使其基於例子,我發現谷歌搜索通過,所以我可能不會得到語法完全正確):

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 
+0

感謝Barmar,我將編輯的問題,你會告訴我什麼,我再次失蹤,好嗎? – MID

+0

更新的問題。還是一樣。 – MID

+0

問題是'$ .getJSON'是異步的。它立即返回,當AJAX調用返回時調用回調函數。你爲什麼不重寫你的checkemail函數來返回true或false,那麼你可以使用內置的遠程驗證來處理呢? – Barmar

相關問題