Проверьте доступность имени пользователя - PullRequest
6 голосов
/ 28 апреля 2011

У меня есть форма для входа пользователя:

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

Я хочу проверить, есть ли имя пользователя в базе данных сразу после: поле пользователя потеряло фокус. Я могу переопределить это событие в форме с помощью javascript, но не могу отправить запрос Ruby-AJAX из кода javascipt.

Есть ли способ проверить имя пользователя без добавления дополнительных элементов управления (кнопок, ссылок) в форму?

Ответы [ 3 ]

35 голосов
/ 28 апреля 2011

Вы можете использовать некоторый 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). В случае размытия обработчик отправит запрос AJAX на URL-адрес, указанный в атрибуте data-validate, и передаст параметр user со значением ввода.

Затем измените свое представление, добавив атрибут 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
0 голосов
/ 14 сентября 2012

Я ответил на это в другом посте.

Это удобный способ проверки форм, если вы не хотите писать все с нуля, используя существующий плагин jquery. Проверьте это, и если вам это нравится, дайте мне знать!

Проверка доступности имени пользователя с помощью jquery и Ajax в рельсах

0 голосов
/ 28 апреля 2011

По какой причине вы не можете отправить запрос ajax из кода javascript?

Лучший способ - отправить запрос GET ajax, когда фокус потерян.Запрос get может затем вернуть true или false, и ваш javascript может отразить это на странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...