Rails вкратце

Cody Fauser, James MacAulay, Edward Ocampo-Gooding, John Guenin, “Rails in a Nutshell”, public translation into Russian from English More about this translation.

Translate into another language.

Глава 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

Pages: ← previous Ctrl next
1 2 3 4

© 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)

translated.by crowd

Like this translation? Share it or bookmark!