Check username availability

后端 未结 3 1525
甜味超标
甜味超标 2020-12-24 04:25

I have a form to user login:

<%= form_tag(@action, :method => \"post\", :name => \'signup\' ,:onSubmit => \'return validate();\') do %>    
           


        
3条回答
  •  渐次进展
    2020-12-24 04:46

    You can use some JavaScript (this one written with jQuery) for AJAX cheking:

    $(function() {
        $('[data-validate]').blur(function() {
            $this = $(this);
            $.get($this.data('validate'), {
                user: $this.val()
            }).success(function() {
                $this.removeClass('field_with_errors');
            }).error(function() {
                $this.addClass('field_with_errors');
            });
        });
    });
    

    This JavaScript will look for any fields with attribute data-validate. Then it assings onBlur event handler (focus lost in JavaScript world). On blur handler will send AJAX request to the URL specified in data-validate attribute and pass parameter user with input value.

    Next modify your view to add attribute data-validate with validation URL:

    <%= text_field_tag(:user, :'data-validate' => '/users/checkname') %>
    

    Next add route:

    resources :users do
      collection do
        get 'checkname'
      end
    end
    

    And last step create your validation:

    class UsersController < ApplicationController
      def checkname
        if User.where('user = ?', params[:user]).count == 0
          render :nothing => true, :status => 200
        else
          render :nothing => true, :status => 409
        end
        return
      end
    
      #... other controller stuff
    end
    

提交回复
热议问题