RoR - разработка

Ruby On Rails

  • Архитектура приложений Rails
  • Установка Rails
  • Немедленное использование
  • Интернет-магазин
    • Задача 3: тестирование
    • Задача А: ведение учета товаров
    • Задача Б: отображение каталога товаров
    • Задача В: создание корзины
    • Задача Г: усиливаем приложение за счет использования AJAX
    • Задача Д: оформление покупки
    • Задача Е: администрирование
    • Задача Ж: окончательная доработка
  • Углубленное изучение Rails
  • Active Support
  • Миграции
  • Active Record
    • Основы
    • Связи между таблицами
    • Жизненный цикл объекта
  • Action Controller: маршрутизация и URL
  • Action Controller и Rails
  • Action View
  • Веб 2.0
  • Action Mailer
  • Веб-службы Rails
  • Безопасность и развертывание приложения
    • Организация защиты Rails-приложения
    • Развертывание и эксплуатация
  • Справка по Ruby
Главная

Шаг A3: проверка приемлемости данных

Пробуя работать с результатами выполнения второго шага, наш заказчик кое-что
заметил. Если он вводил неверную цену или забывал ввести описание товара,
приложение с легкостью воспринимало данные формы и добавляло запись в базу
данных. Если отсутствие описания может лишь ввести в замешательство, то цена,
состоящая из одних нулей, может привести к реальным потерям, поэтому заказчик
просит добавить в приложение проверку приемлемости данных. В базу данных
не должен попадать товар с пустым наименованием или описанием, неправильным
URL изображения или неверной ценой.
Итак, куда же нам поместить проверку?
Именно модель должна выступить в роли привратника на пути из мира программного
кода в мир базы данных. Все, что делается в приложении, выходит из
базы данных и попадает туда только через модель. Поэтому она представляет собой
идеальное место для размещения всевозможных проверок, независимо от того,
откуда поступают данные — из формы или из самого приложения в результате
работы программного кода. Проверка моделью данных перед их записью в базу
защищает базу данных от негодной информации. Посмотрим на исходный код
класса модели (app/models/productrb).
class P r o d u c t < A c t i v e R e c o r d : : B a s e
Согласитесь, не слишком объемное содержание. Все сложные задачи (отображение
содержимого базы данных, его создание, обновление, поиск и т. д.) осуществ-
-иаотся в родительском классе (ActiveRecord: :Base, который является частью
Rails). Благодаря наследованию наш класс Product приобретает все функцио-
вльные возможности автоматически.
При добавлении проверки не должно быть ничего лишнего. Начнем с проверки
текстовых полей на заполнение перед тем, как строка будет записана в базу
JBHHbix. Для этого к существующей модели добавляется программный код:
class Product%r{\.(gifIjpg|png)$}i,
.message => "URL должен указывать на изображения формата
GIF, JPG или PNG"
Итак, через пару минут мы добавим к модели ряд проверок, с помощью которых
проконтролируем,что:
• поля наименования (titie) , описания (description ) и адреса изображения
(image_URL) не пусты;
• цена выражена допустимым числом, значение которого не меньше, чем 0,01;
• наименование (title) уникально для всех товаров;
• адрес изображения (imageJJRL) выглядит вполне правдоподобно.
Полный листинг обновленной модели Product выглядит следующим образом:
Листинг файла app/models/product.rb
class Product%r{\.(gif | jpg | png) $ } i ,
:message => "URL должен указывать на изображения
формата GIF,JPG или PNG"
protected
defvalidate
errors.add(:price, "должна быть не менее 0 . 0 1 " )
if price.nil?||price< 0.01
end
end
Ближе к концу реализации этого шага мы попросим нашего заказчика опробовать
приложение, чтобы обрадовать его еще больше. Это займет всего несколько
минут, но простое добавление проверки придаст страницам учета товара более
солидный вид.

Реклама 1

Продам емкость. Емкость металлическая. Емкость для бетона.. ресиверы onkyo. точечные светильники теплые

Реклама 0

спортивное питание сжигатель жира. уфмс по г. москва