Rails вкратце |
- Statistics
- Participants
- Translate into Russian
- Translation result
- 97% translated in draft. Almost done, let's finish it!
Глава 1. Rails
Что делает вас счастливыми?
Программиста делает счастливым возможность быстро и ясно изложить свою идею так, что ее смогут легко понять и развить другие.
Сюрпризы в поведении кода, повторяющийся код, рутинные операции по заполнению кофигурационных файлов, разрешение вопросов о структуре каталогов, чтобы держать все под рукой, и поиск необходимых библиотек создают препятствия в работе.
Rails использует принцип DRY (don’t repeat youself — не повторяй себя) — единая предсказуемая и продуманная конфигурация, файловая структура и встроенные библиотеки используются во всех проектах по умолчанию, сводя к минимуму дополнительную работу по настройке. Главная идея Rails — преимущество соглашения о структуре веб-приложения над ручной настройкой.
Создавая приложения с Rails, вы сосредоточены на собственной задаче, а не на изобретении очередного велосипеда.
Архитектура
После создания нескольких веб приложений, вы воспринимаете некоторые паттерны как лучшие с точки зрения построения и разработки.
Обычно над проектом работают три типичных участника команды: представитель бизнеса, дизайнер и менеджер, который объединяет их усилия для достижения желаемого результата. Такая команда работает гораздо эффективнее, если каждый из них имеет полный контроль только над своей работой, а друг с другом они общаются посредством общепринятых методов.
Эта идея — разделять бизнес логику, интерфейс, и соединение этого всего вместе — формально известна как шаблон MVC (Model View Controller). Фреймворк Rails построен на этой идее разделения ролей.
Модель
Модель содержит бизнес логику — можно ли что-то отправлять куда-то: поздравить кого-то с днём рождения или запустить космический корабль. Все это действует как модель вещей в реальной жизни. Эти решения часто основываются на прошедших событиях, так что практически всегда используется база данных.
Rails берет на себя работу с базой данных при помощи ActiveRecord, а вам остается заполнить лишь те части, которые относятся к вашему делу. Также генерируются тесты посредством пакета UnitTest.
Представление
Представление определяет, как информация будет показана: например в браузере, или в агрегаторе RSS, или где-либо ещё. Это сфера дизайнера, его задача — правильно представить данные, полученные из модели.
Rails помогает работать с представлением с помощью ActionView, которое объединяет:
встроенный в Руби язык шаблонов (ERB),
основанный на Builder язык шаблонов (употребляющийся для создания XML, как например ленты RSS, а так же объектов JSON),
вспомогательные методы для генерации форм, отображения дат, ссылок и текста,
совместное использование шаблонами блоков верстки,
интеграцию JavaScript и Ajax,
а так же механизмы быстрого построения эскизов сайта.
Контроллер
Контроллер всё объединяет. Его задача — обработать поступивший запрос, получить данные от компонентов бизнес-логики и вернуть обработанный с помощью Представления результат.
ActiveController — часть Rails которая предоставляет для этого:
фильтры предварительной и завершающей обработки ответа (полезно, например, для аутентификации),
маршрутизацию (по соглашению — REST, но легко адаптируемую для любой необходимой вам структуры сайта),
автоматические тесты производительности и журналирование,
кэширование (с тремя уровнями детализации),
а так же управление сессиями.
Замечание
ActionView и ActionController входят в состав ActionPack
Почта
Почта не является частью шаблона MVC (хотя можно представить его как часть представления), однако вы, скорее всего, рано или поздно захотите отправлять письма.
Rails упрощает этот процесс с помощью библиотеки ActionMailer, которая делает отправку почты очень простой.
Десерт
Rails значительно расширяет язык Ruby, позволяя писать такие вещи, как:
5.days.from_now
Этот слой дополнительного «синтаксического сахара» для Ruby находится в библиотеке ActiveSupport.
Расширяемость
Rails легко расширять и модифицировать. Для этой цели существуют тысячи доступных плагинов
И если вас не устраивает установка одного из этого множества, мы расскажем как написать плагин.
Пример Rails-приложения
Давайте сделаем простой сайт интернет-газеты, позволяющий создавать, редактировать и читать статьи.
В командной строке (терминале), создайте Rails-проект, выполнив команду:
rails newspaper
Перейдите в папку с приложением:
cd newspaper
Давайте посмотрим что было сгенерировано [вставить таблицу из директории со структурой и описанием]
Запустим приложение (оно содержит собственный сервер, который работает по умолчанию на порту 3000):
script/server
Готово, можно посмотреть в браузере по адресу http://localhost:3000
Примечание
Вам необходим текстовый редактор для следующих частей. Если вы работаете в Windows, воспользуйтесь Блокнотом, а не Word.
Если все идет верно то вы увидите веб-страницу с некоторыми советами как начать работу с вашим приложением.
Давайте последуем примеру и исполним script/generate для создания моделей и контроллеров
Практическое правило, используемое для определения, какую создать модель — взглянуть на существительные, которыми мы воспользуемся, описывая приложение. В нашем случае, приложение предназначено для написания, редактирования и показа статей, поэтому мы создадим модель Article (статья):
$ ./script/generate model Article
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/article.rb
create test/unit/article_test.rb
create test/fixtures/articles.yml
create db/migrate
create db/migrate/20090913163814_create_articles.rb
Нам также необходим контроллер для определения когда читатель захочет прочесть статьи:
$ ./script/generate controller articles
exists app/controllers/
exists app/helpers/
create app/views/articles
exists test/functional/
create test/unit/helpers/
create app/controllers/articles_controller.rb
create test/functional/articles_controller_test.rb
create app/helpers/articles_helper.rb
create test/unit/helpers/articles_helper_test.rb
Предупреждение
Имя контроллера по договорённости должно быть множественным числом имени модели. (Договорённость важнее настройки — один и основных принципов Rails) Убедитесь что вы написали articles а не article. Если придерживаться договорённости, Rails сможет автоматически прописать маршрутизацию, о чем мы расскажем позже. Если ошиблись, запустите: script/destroy controller article
Теперь, когда у нас есть Контроллер и Модель, давайте опять взглянем на наше приложение. Запустите его с помощью команды script/server, если вы останавливали его, и наберите в браузере http://localhost:3000 еще раз.
Выглядит как будто ничего не изменилось. Это потому что мы не выполнили второй шаг — «установить маршрут по умолчанию и переименовать файл». Здесь говорится о файле public/index.html.
Все статичные файлы, такие как JavaScript, CSS и картинки, живут в папке public/ Попробуйте отредактировать файл public/500.html, заменив текст на следующий: «Извиняемся, что-то произошло неправильно. Но я действительно люблю ПЕЧЕНЬЕ!». Сохраните файл и посмотрите страницу http://localhost:3000/500.html. Если сообщение не изменилось — перезапустите сервер и попробуйте снова (если что-то идёт не так — для начала всегда попробуйте перезапустить сервер).
Теперь, зная как работает папка public/, мы можем догадаться, что страница, которую мы видели в браузере по запросу http://localhost:3000/ находится в файле public/index.html, поскольку веб-сервера всегда показывают файл index.html, если находят его в корневой директории (как в нашем случае).
Переименуйте public/index.html в public/setup_instructions.html и посетите http://localhost:3000/ еще раз.
Должна обнаружится ошибка маршрута — так как мы не последовали инструкциям по установке маршрута по умолчанию в config/routes.rb.
Примечание
Вы можете снова увидеть инструкции по настройке, открыв в браузере http://localhost:3000/setup_instructions.html или посмотрев файл public /setup_instructions.html
Взгляните на config/routes.rb и замените
# map.root :controller => "welcome"
чтобы он указывал на ArticlesController, написав
map.root :controller => "articles"
Обновите http://localhost:3000/ и вы увидите ошибку «Unknown action» (Неизвестное действие), так как ни одно действие не отвечает на запрос к index.
Примечание
Убедитесь, что вы видите отладочные сообщения в терминале где вы запустили rails-сервер или в конце файла log/development.log. Эти сообщения — одно из лучших средств отладки.
Это легко исправить. Откройте apps/controllers/articles_controller.rb.
Прямо сейчас он довольно уныл:
class ArticlesController < ApplicationController
end
«Действие index», об отсутствии которого говорили Rails обозначает отсутствие публично объявленного метода index в ArticlesController.
Исправим это, добавив его:
class ArticlesController < ApplicationController
© Copyright © 2009 Cody Fauser, James MacAulay, Edward Ocampo-Gooding, and John Guenin
Original (English): Rails in a Nutshell
Translation: © alexbaumgertner, Александр Семёнов, Valeanna, asplogika, Андрей Савченко, zula, sitnik, saturn721 .
License: Open Feedback Publishing System (OFPS)
