检查用户名可用性

我有一个用户登录表单:

 "post", :name => 'signup' ,:onSubmit => 'return validate();') do %>   

我想在以后检查数据库中是否有用户名:user-field lost focus。 我可以使用javascript在表单上覆盖此事件,但我无法从javascipt代码发送Ruby-AJAX请求。

有没有办法检查用户名而不在表单上添加其他控件(按钮,链接)?

为什么你不能从javascript代码发送ajax请求?

最好的方法是在焦点丢失时发送GET ajax请求。 然后,get请求可以返回true或false,然后您的javascript可以在页面上反映出来。

您可以使用一些JavaScript(这是用jQuery编写的)用于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'); }); }); }); 

此JavaScript将查找具有属性data-validate任何字段。 然后它决定onBlur事件处理程序(焦点在JavaScript世界中丢失)。 模糊处理程序将AJAX请求发送到data-validate属性中指定的URL,并使用输入值传递参数user

接下来修改您的视图以使用validationURL添加属性data-validate

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

下一步添加路线:

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

最后一步创建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 

我在另一篇文章中回答了这一点

如果您不想使用现有的jquery插件从头开始编写表单,那么这是一种validation表单的友好方式。 看看它,如果你喜欢它让我知道!

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