使用rails中的jquery和Ajax检查用户名可用性

Kum*_*mar 4 ajax jquery ruby-on-rails ruby-on-rails-3

我正在使用带有jquery和ajax的rails来检查用户名的可用性.我使用以下插件进行jquery验证.

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
Run Code Online (Sandbox Code Playgroud)

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

Kum*_*mar 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"%>
Run Code Online (Sandbox Code Playgroud)

在同一视图中,在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>
Run Code Online (Sandbox Code Playgroud)

在routes.rb中,我有以下路线.

match '/check-user' =>"users#check_user"  // creating route for ajax call
Run Code Online (Sandbox Code Playgroud)

在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"
            },
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)