11.1. Шаг Е1: добавление пользователей
Качнем с создания модели и таблицы базы данных, в которых будут содержаться ■мена пользователей и хэшированные пароли наших администраторов. Вместо наго чтобы хранить пароли в виде обыкновенного текста, мы пропустим их через преобразователь SHA1, выдающий 160-разрядный хэш.
Задача Е: администрирование
Итак, заказчик доволен — в сравнительно короткие сроки мы совместными уси¬лиями собрали воедино все необходимое для работы корзины покупателя, и он может приступать к ее демонстрации своим пользователям. Но ему захотелось увидеть еще одно дополнение.
10.2. Что нам удалось сделать
За сравнительно короткий промежуток времени нам удалось сделать следующее:
• Добавить таблицы orders и 1 i ne_i terns (и соответствующие им модели) и ус¬тановить связи между ними.
• Создать форму для сбора сведений, необходимых для оформления заказа, и при¬вязать ее к модели заказа (order).
Корректировка предыдущего АJАХ-кода
После того как заказ принят, мы возвращаемся на страницу каталога с отображе¬нием радостного флэш-сообщения: «Спасибо за Ваш заказ».
Получение сведений о заказе
Теперь создадим в контроллере действие save_order. Возложим на него следую¬щие функции.
1. Прием значений формы и заполнение ими нового модельного объекта Order.
2. Добавление к этому объекту записей о товарах, взятых из корзины покупателя.
Создание формы для ввода информации о заказе
Теперь, когда у нас есть таблицы и модели, можно приступать к процессу оформления заказа. Сначала нам нужно добавить к корзине кнопку Оформить заказ и свя¬жет, ее в контроллере магазина (store) с действием оформления заказа (checkout).
Лсгинг файла app/views/store/_cart.rhtml
class="cart-title" >Ваша Kop3HHa «tafile>
Взаимосвязи моделей
Теперь база данных знает о взаимосвязях между записями товаров (1 i ne i terns), заказами (orders) и товарами (products). Но Rails-приложение об этом не знает. Нам необходимо добавить к файлам модели некоторые объявления, определяю¬щие характер их взаимосвязей.
10.1. Шаг Д1: регистрация заказа
Заказ представляет собой набор записей товаров, дополненный подробностями, необходимыми для оформления покупки. Некоторое подобие записей товаров у нас уже есть. В нашей корзине содержатся отобранные товары, но пока у нас нет для них таблицы базы данных. У нас также нет таблицы для хранения информа¬ции о заказах.
Задача Д: оформление покупки
Подведем итоги. На данный момент мы собрали воедино основную систему веде¬ния перечня товара, создали каталог и получили довольно привлекательную кор¬зину покупателя. А теперь нам нужно дать покупателю реальную возможность приобрести содержимое корзины. Давайте реализуем функцию оформления по¬купки.
Чем заняться на досуге
• Сейчас опустошенная пользователем корзина исчезает при перерисовке всего оталога. Не могли бы вы изменить код приложения, чтобы для этого исполь¬зовался метод blind_up из библиотеки Script.aculo.us?
• Будет ли работать внесенное вами изменение в браузере с отключенным Java¬Script?