Мне нравится, когда веб-приложение дает мне мгновенную обратную связь о действительности моей записи.
Например:
это особенно актуально, когда я регистрирую новую учетную запись пользователя — отправлять страницу снова и снова, потому что выбранное мной имя пользователя уже занято или пароль не соответствует требованиям, всегда затруднительно. Поэтому я начал искать примеры того, как это сделать в Rails, и не смог ничего найти (возможно, потому, что на самом деле я не знаю, как это назвать) — я думаю, это больше всего похоже на
автозаполнение , поэтому я собираюсь с автоматической проверкой , И вот шаги, которые я собрал, чтобы заставить это работать …
Настройка вещей
Создание проекта Rails
- Создайте новое приложение Ruby on Rails с именем autovalidation . Вы можете выбрать Готово после первой страницы диалога New Ruby on Rails Application:
- Щелкните правой кнопкой мыши проект и выберите Run Rake Task> db> create:
- Щелкните правой кнопкой мыши проект и выберите «Создать». Создайте каркас с именем пользователя модели и парой атрибутов : строка :
- Щелкните правой кнопкой мыши проект и выберите «Перенос базы данных»> «В текущую версию».
- Откройте user.rb и введите следующее:
vu[tab]
— это расширится до:
введите имя пользователя над атрибутом и нажмите ввод.
- На следующей строке в user.rb введите следующее:
vl[tab]
это расширится до:
введите имя пользователя над атрибутом и нажмите ввод. Введите 5..10 вместо 3..20 и нажмите ввод. Завершенный код должен выглядеть следующим образом:
class User < ActiveRecord::Base validates_uniqueness_of :username validates_length_of :username, :within => 5..10 end
Традиционная проверка на стороне сервера
- Запустите проект и перейдите по адресу http: // localhost: 3000 / users . Попробуйте создать нового пользователя, такого как bill :
- Хорошо, создай Уильям .
- Попробуем снова создать Уильям :
давайте расширим это приложение, добавив более удобную «автоматическую проверку» …
Позволяет Autovalidate
В дополнение к выполняемой проверке на стороне сервера мы добавим некоторую проверку на стороне клиента с помощью Ajax. Мы сделаем это, отобразив справа от поля сообщение о достоверности введенных данных. Поскольку мы проверяем базу данных, нам нужно сделать запрос XMLHTTPRequest обратно на сервер. Для этой задачи мы можем использовать вспомогательный метод Rails для наблюдения .
- Сначала нам нужно создать именованный заполнитель для сообщения. Откройте new.html.erb и добавьте тег <span> после текстового поля следующим образом:
<%= f.text_field :username %><span id="message"></span>
- Теперь мы будем использовать метод 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 %>
- Создайте действие проверки. Откройте 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 выше.
- Создайте новый файл ERB с именем _message в Views> users. Замените его содержимое следующим:
<%= @message %>
- Откройте users.html.erb и добавьте следующее перед закрывающим тегом </ head>:
<%= javascript_include_tag 'prototype' %>
Все приложения Rails поставляются с готовыми к использованию библиотеками prototype и scriptaculous , но вы должны сообщить приложению, что хотите их использовать.
Запустить с помощью Autovalidate
- Переключитесь в браузер и начните создавать нового пользователя (вам нужно будет один раз обновить браузер, чтобы загрузить прототип библиотеки JavaScript):
Поиск проблемы
Firebug — ваш друг для устранения неполадок в Rails-приложениях. С включенным Firebug вы можете видеть запросы по мере ввода:
Пара вещей, которые сбили меня с толку
Забыть включить библиотеки прототипов:
Неправильное написание поля для наблюдения: