Статьи

Автовалидация с помощью Rails


Мне нравится, когда веб-приложение дает мне мгновенную обратную связь о действительности моей записи.
Например:

это особенно актуально, когда я регистрирую новую учетную запись пользователя — отправлять страницу снова и снова, потому что выбранное мной имя пользователя уже занято или пароль не соответствует требованиям, всегда затруднительно. Поэтому я начал искать примеры того, как это сделать в Rails, и не смог ничего найти (возможно, потому, что на самом деле я не знаю, как это назвать) — я думаю, это больше всего похоже на
автозаполнение , поэтому я собираюсь с автоматической проверкой , И вот шаги, которые я собрал, чтобы заставить это работать …

Настройка вещей

  1. Загрузите и установите MySQL.
  2. Загрузите и установите NetBeans 6.1 RC1 или более позднюю версию .

Создание проекта Rails

  1. Создайте новое приложение Ruby on Rails с именем autovalidation . Вы можете выбрать Готово после первой страницы диалога New Ruby on Rails Application:
  2. Щелкните правой кнопкой мыши проект и выберите Run Rake Task> db> create:

  3. Щелкните правой кнопкой мыши проект и выберите «Создать». Создайте каркас с именем пользователя модели и парой атрибутов : строка :
  4. Щелкните правой кнопкой мыши проект и выберите «Перенос базы данных»> «В текущую версию».
  5. Откройте user.rb и введите следующее:
    vu[tab]

    — это расширится до:

    введите имя пользователя над атрибутом и нажмите ввод.

  6. На следующей строке в user.rb введите следующее:
    vl[tab]

    это расширится до:

    введите имя пользователя над атрибутом и нажмите ввод. Введите 5..10 вместо 3..20 и нажмите ввод. Завершенный код должен выглядеть следующим образом:

    class User < ActiveRecord::Base
      validates_uniqueness_of :username
      validates_length_of :username, :within => 5..10
    end
     

Традиционная проверка на стороне сервера

  1. Запустите проект и перейдите по адресу http: // localhost: 3000 / users . Попробуйте создать нового пользователя, такого как bill :

  2. Хорошо, создай Уильям .
  3. Попробуем снова создать Уильям :

    давайте расширим это приложение, добавив более удобную «автоматическую проверку» …

Позволяет Autovalidate

В дополнение к выполняемой проверке на стороне сервера мы добавим некоторую проверку на стороне клиента с помощью Ajax. Мы сделаем это, отобразив справа от поля сообщение о достоверности введенных данных. Поскольку мы проверяем базу данных, нам нужно сделать запрос XMLHTTPRequest обратно на сервер. Для этой задачи мы можем использовать вспомогательный метод Rails для наблюдения .

  1. Сначала нам нужно создать именованный заполнитель для сообщения. Откройте new.html.erb и добавьте тег <span> после текстового поля следующим образом:
    <%= f.text_field :username %><span id="message"></span>
  2. Теперь мы будем использовать метод Rail_ для наблюдения за полями, чтобы отслеживать изменения в этом поле. Добавьте следующее перед закрывающим тегом <% end%>:
        <%= observe_field   :user_username,                         # The field to observe 
                            :with       => "username",              # The input to validate
                            :frequency  => 0.25,                    # The frequency in seconds to watch for changes
                            :url        => {:action => :validate }, # The action to call when changes occur
                            :update     => :message                 # The DOM ID to update
                          %>
  3. Создайте действие проверки. Откройте users_controller.rb и добавьте следующее:
      def validate
        color = 'red'
        username = params[:username]
        if username.length < 5
          message = 'Too short'
        elsif username.length > 10
          message = 'Too long'
        else
          user = User.find_all_by_username(username)      
          if user.size > 0        
            message = 'Taken'     
          else
            message = 'Available'
            color = 'green'
          end
        end
        @message = "<b style='color:#{color}'>#{message}</b>"
        render :partial=>'message'
      end

    Вы заметите, что в последней строке действия validate выше мы отрисовываем частичное. Этот фрагмент, который мы создадим следующим, будет динамически визуализироваться внутри тега span, который мы определили на шаге 1 выше.

  4. Создайте новый файл ERB с именем _message в Views> users. Замените его содержимое следующим:
    <%= @message %>
  5. Откройте users.html.erb и добавьте следующее перед закрывающим тегом </ head>:
    <%= javascript_include_tag 'prototype'  %>

    Все приложения Rails поставляются с готовыми к использованию библиотеками prototype и scriptaculous , но вы должны сообщить приложению, что хотите их использовать.

Запустить с помощью Autovalidate

  1. Переключитесь в браузер и начните создавать нового пользователя (вам нужно будет один раз обновить браузер, чтобы загрузить прототип библиотеки JavaScript):

Поиск проблемы

Firebug — ваш друг для устранения неполадок в Rails-приложениях. С включенным Firebug вы можете видеть запросы по мере ввода:

Пара вещей, которые сбили меня с толку

    Забыть включить библиотеки прототипов:

    Неправильное написание поля для наблюдения:

Заполненное заявление

autovalidation.zip