'signup' ,:onSubmit => 'return validate();') do %> 我想在 :user--6ren">
gpt4 book ai didi

ruby-on-rails - 检查用户名可用性

转载 作者:行者123 更新时间:2023-12-03 16:13:42 26 4
gpt4 key购买 nike

我有一个用户登录表单:

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

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

有没有办法检查用户名而不在表单上添加额外的控件(按钮、链接)?

最佳答案

您可以使用一些 JavaScript(这个用 jQuery 编写的)进行 AJAX 校验:

$(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 世界中丢失)。模糊处理程序将向 data-validate 中指定的 URL 发送 AJAX 请求。属性和传递参数 user与输入值。

接下来修改您的 View 以添加属性 data-validate带有验证 URL:
<%= text_field_tag(:user, :'data-validate' => '/users/checkname') %>

接下来添加路由:
resources :users do
collection do
get 'checkname'
end
end

最后一步创建您的验证:
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

关于ruby-on-rails - 检查用户名可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5815687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com