2011-12-29 63 views
4

我正在使用jquery和ajax来检查用户名的可用性。我正在使用 下面的插件jQuery验证的目的。在rails中使用jquery和Ajax检查用户可用性

https://github.com/posabsolute/jQuery-Validation-Engine

在我的控制,我使用下面的方法来检查用户名的可用性。

def check_name 
name = params[:name] 
if name.strip == "" 
    render :json => { :available => false } 
    return 
end 
user = User.find(:first, :conditions => [ "name = ?", name]) 
if user 
    render :json => ["name", false , "This name is already taken"] 
else 
    render :json => ["name", true , ""] 
end 
end 

这是写这个方法的正确方法吗?我在这个论坛上检查了许多用户名可用性 的帖子,但没有任何结果。

+0

我回答我的问题。我有它正在工作.. – Kumar 2011-12-29 19:50:05

+1

您应该添加答案并稍后接受,以便有类似问题的其他人可以参考。 – 2011-12-30 08:07:51

+2

这是'rails check username ajax'的谷歌搜索结果。你应该添加你的答案。 – 2012-01-07 05:30:04

回答

6

我在添加答案。对不起,延迟的家伙。

对插件的首要功劳:https://github.com/posabsolute/jQuery-Validation-Engine。 在应用程序中使用插件进行验证。

在视图中,我有

<%= f.username_field :username, :id => 'free-user', :placeholder=>'User Name', :class => "validate[required, ajax[ajaxUserCall]]", "data-prompt-position" => "topLeft:0,9"%> 

在同样的观点,在Java脚本:

<script type="text/javascript"> 
$(document).ready(function(){ 
    $("#free-user").bind("jqv.field.result", function(event, field, errorFound, prompText){ 
    if(errorFound){ 
     $(".continue").attr("disabled", false); // .continue is a button 
    } else{ 
     $(".continue").attr("disabled", true); 
    } 
    }) 
}); 
</script> 

在routes.rb中我有以下的路线。

match '/check-user' =>"users#check_user" // creating route for ajax call 

在jquery.validationEngine-en.js文件我有以下:

"ajaxUserCall": { 
       "url": "/check-user", 
       // you may want to pass extra data on the ajax call 
       "alertText": "* This user is already taken", 
       "alertTextLoad": "* Validating, please wait" 
      }, 

在用户控制,我有以下方法

def check_user 
    user = params[:fieldValue] 
    user = User.where("username = ?", username).first 
    if user.present? 
    render :json => ["free-user", false , "This User is already taken"] 
    else 
    render :json => ["free-user", true , ""] 
    end 
end 
+0

伟大的文章,现在试图遵循它。我有一个(可能是愚蠢的)问题。是否可以使用另一个文件作为'ajaxUserCall'?我使用Rails和它的管道,所以我不能访问文件'jquery.validationEngine-en.js'。谢谢 – 2015-04-25 12:58:53

+0

你是什么意思AI D,你可以下载这个文件并把它放在你的供应商文件中(不要忘记需要它)。 – 2016-01-28 21:08:53

2

要检查用户名/电子邮件可用性请执行以下操作:

使用https://github.com/posabsolute/jQuery-Validation-Engine

编辑对AJAX的validationsEngines-en.js文件调用,一个用于电子邮件看起来像下面这样:

  "ajaxEmailAvailable": { 
       "url": "/route_to_send_the_parameters", 
       // you may want to pass extra data on the ajax call 
       "alertTextOk": "* This email is available", 
       "alertText": "* This email is already taken", 
       "alertTextLoad": "* Validating, please wait" 
      }, 

确保您配置的routes.rb文件,以配合您要使用的路由,呼叫的默认操作是GET HTTP请求。

接着设置适当的动作在控制器来处理该请求(I包括在应用控制器的辅助,使得输入值可以被消毒之前查询在数据库中:

CONTROLLER处理请求

def username_availability 
    scrubb = help.sanitize(params[:fieldValue], :tags => '') 
    user = User.find_by_email(scrubb) 
     if user.blank? 
      render :json => ["INPUT_ID", true , ""] 
     else 
      render :json => ["INPUT_ID", false , "This email is already taken"] 
     end 
    end 

如果您不能确定正确的输入ID的,看在通话过程中传递的参数的服务器日志,并做了简单的复制粘贴。默认情况下,请求将输入ID和输入值。

要访问这个帮助增加以下内容:

应用控制器

def help 
    Helper.instance 
    end 

    class Helper 
    include Singleton 
    include ActionView::Helpers::TextHelper 
    end 

现在的形式本身,您输入应阅读如下:

<%= c.text_field :email, "data-validation-engine"=>"validate[required, custom[email], ajax[ajaxEmailAvailable]]" %> 

按正常功能始终将AJAX调用作为最后的验证。

不要忘记在文档的头部[按照js的顺序]包含jquery.js,jquery.validationEngine-en.js,jquery.validationEngine.js和validationEngine.jquery.css,并调用

<script type="text/javascript">$(function() {$("#FORM_ID").validationEngine();});</script> 

如果您想为用户名执行此操作,请恰当地编辑上述内容。