我很难找到一种有效的异步方法来测试用户输入的电子邮件是否唯一。我不想在我的控制器中使用验证,因为我想在用户提交表单之前显示一个弹出窗口。
我基本上是在尝试做 User.find(:all, :conditions => ["email == ?", current_user.email]) 但在我的html页面上的javascript中。
我很难找到一种有效的异步方法来测试用户输入的电子邮件是否唯一。我不想在我的控制器中使用验证,因为我想在用户提交表单之前显示一个弹出窗口。
我基本上是在尝试做 User.find(:all, :conditions => ["email == ?", current_user.email]) 但在我的html页面上的javascript中。
你需要这样的东西:
unique = (User.find(:all, :conditions => ["email == ?", current_user.email])).length == 0
. 让它像这样返回 JSON render json: unique
:. 无需观景。这是一个使用 jQuery 的未经测试的示例:
function isEmailUnique(email) {
jQuery.get('/my-controller/test-email-uniqueness', email, function(json) {
if (json.unique) {
// Tell the user the email is in use.
}
});
}
那应该这样做。您需要对控制器返回的 JSON 文档的结构做一些工作。不要返回整个用户记录,因为这会使邪恶的人访问他们不应该访问的内容。最好返回类似的东西{ 'email': 'user@example.com', 'unique': true }
希望能帮助到你。