Предисловие
 Благодарности
 Об авторе
 Введение
 
 Глава 1. Среда и конфигурирование Rails
   Запуск
   Параметры среды по умолчанию
   Начальная загрузка
   Пакеты RubyGem
   Инициализатор
   Подразумеваемые пути загрузки
   Rails, модули и код автозагрузки
   Встройка Rails Info
   Конфигурирование
   Дополнительные конфигурационные параметры
   Режим разработки
   Динамическая перезагрузка классов
   Загрузчик классов в Rails
   Режим тестирования
   Режим эксплуатации
   Протоколирование
   Протоколы Rails
   Анализ протоколов
   Syslog
   Заключение
 
 Глава 2. Работа с контроллерами
   Диспетчер: с чего все начинается
   Обработка запроса
   Познакомимся с диспетчером поближе
   Рендеринг представления
   Если сомневаетесь, рисуйте
   Явный рендеринг
   Рендеринг шаблона другого действия
   Рендеринг совершенно постороннего шаблона
   Рендеринг подшаблона
   Рендеринг встроенного шаблона
   Рендеринг текста
   Рендеринг структурированных данных других типов
   Пустой рендеринг
   Параметры рендеринга
   Переадресация
   Коммуникация между контроллером и представлением
   Фильтры
   Наследование фильтров
   Типы фильтров
   Упорядочение цепочки фильтров
   Around-фильтры
   Пропуск цепочки фильтров
   Условная фильтрация
   Прерывание цепочки фильтров
   Потоковая отправка
   send_data(data, options = {})
   send_file(path, options = {})
   Как заставить сам веб-сервер отправлять файлы
   Заключение
 
 Глава 3. Маршрутизация
   Две задачи маршрутизации
   Связанные параметры
   Метапараметры ("приемники")
   Статические строки
   Файл routes.rb
   Маршрут по умолчанию
   О поле :id
   Генерация маршрута по умолчанию
   Модификация маршрута по умолчанию
   Предпоследний маршрут и метод respond_to
   Метод respond_to и заголовок HTTP-Accept
   Пустой маршрут
   Самостоятельное создание маршрутов
   Использование статических строк
   Использование собственных "приемников"
   Замечание о порядке маршрутов
   Применение регулярных выражений в маршрутах
   Параметры по умолчанию и метод url_for
   Что случилось с :id
   Использование литеральных URL
   Маскирование маршрутов
   Маскирование пар ключ/значение
   Именованные маршруты
   Создание именованного маршрута
   Что лучше: name_path или name_url?
   Замечания
   Как выбирать имена для маршрутов
   Синтаксическая глазурь
   Еще немного глазури?
   Метод организации контекста with_options
   Заключение
 
 Глава 4. REST, ресурсы и Rails
   О REST в двух словах
   REST в Rails
   Маршрутизация и CRUD
   Ресурсы и представления
   Ресурсы REST и Rails
   От именованных маршрутов к поддержке REST
   И снова о глаголах HTTP
   Стандартные REST-совместимые действия контроллеров
   Хитрость для методов PUT и DELETE
   Одиночные и множественные 
   REST-совместимые маршруты
   Специальные пары: new/create и edit/update
   Одиночные маршруты к ресурсам
   Вложенные ресурсы
   Явное задание :path_prefix
 Явное задание :name_prefix
 Явное задание REST-совместимых контроллеров
 А теперь все вместе
 Замечания
 О глубокой вложенности
 Настройка REST-совместимых маршрутов
 Маршруты к дополнительным действиям
 Дополнительные маршруты к наборам
 Замечания
 Ресурсы, ассоциированные только с контроллером
 Различные представления ресурсов
 Метод respond_to
 Форматированные именованные маршруты
 Набор действий в Rails для REST
 index
 show
 destroy
 new и create
 edit и update
 Заключение
 
 Глава 5. Размышления о маршрутизации в Rails
 Исследование маршрутов в консоли приложения
 Распечатка маршрутов
 Анатомия объекта Route
 Распознавание и генерация с консоли
 Консоль и именованные маршруты
 Тестирование маршрутов
 Подключаемый модуль Routing Navigator
 Заключение
 
 Глава 6. Работа с ActiveRecord
 Основы
 Миграции
 Создание миграций
 Migration API
 Определение колонок
 Методы в стиле макросов
 Объявление отношений
 Примат соглашения над конфигурацией
 Приведение к множественному числу
 Задание имен вручную
 Унаследованные схемы именования
 Определение атрибутов
 Значения атрибутов по умолчанию
 Сериализованные атрибуты
 CRUD: создание, чтение, обновление, удаление
 Создание новых экземпляров ActiveRecord
 Чтение объектов ActiveRecord
 Чтение и запись атрибутов
 Доступ к атрибутам и манипулирование ими 
 до приведения типов
 Перезагрузка
 Динамический поиск по атрибутам
 Специальные SQL-запросы
 Кэш запросов
 Обновление
 Обновление с условием
 Обновление конкретного экземпляра
 Обновление конкретных атрибутов
 Вспомогательные методы обновления
 Контроль доступа к атрибутам
 Удаление и уничтожение
 Блокировка базы данных
 Оптимистическая блокировка
 Пессимистическая блокировка
 Замечание
 Дополнительные средства поиска
 Условия
 Упорядочение результатов поиска
 Параметры limit и offset
 Параметр select
 Параметр from
 Группировка
 Параметры блокировки
 Соединение и включение ассоциаций
 Параметр readonly
 Соединение с несколькими базами данных в разных моделях
 Прямое использование соединений с базой данных
 Модуль DatabaseStatements
 Другие методы объекта connection
 Другие конфигурационные параметры
 Заключение
 
 Глава 7. Ассоциации в ActiveRecord
 Иерархия ассоциаций
 Отношения один-ко-многим
 Добавление ассоциированных объектов в набор
 Методы класса AssociationCollection
 Ассоциация belongs_to
 Перезагрузка ассоциации
 Построение и создание связанных объектов через ассоциацию
 Параметры метода belongs_to
 Ассоциация has_many
 Параметры метода has_many
 Методы прокси-классов
 Отношения многие-ко-многим
 Метод has_and_belongs_to_many
 Конструкция has_many :through
 Параметры ассоциации has_many :through
 Отношения один-кодному
 Ассоциация has_one
 Параметры ассоциации has_one
 Несохраненные объекты и ассоциации
 Ассоциации один-к-одному
 Наборы
 Расширения ассоциаций
 Класс AssociationProxy
 Методы reload и reset
 Методы proxy_owner, proxy_reflection и proxy_target
 Заключение
 
 Глава 8. Валидаторы в ActiveRecord
 Нахождение ошибок
 Простые декларативные валидаторы
 validates_acceptance_of
 validates_associated
 validates_confirmation_of
 validates_each
 validates_inclusion_of и validates_exclusion_of
 validates_existence_of
 validates_format_of
 validates_length_of
 validates_numericality_of
 validates_presence_of
 validates_uniqueness_of
 Исключение RecordInvalid
 Общие параметры валидаторов
 :allow_nil
 :if
 :message
 :on
 Условная проверка
 Замечания по поводу применения
 Работа с объектом Errors
 Манипулирование набором Errors
 Проверка наличия ошибок
 Нестандартный контроль
 Отказ от контроля
 Заключение
 
 Глава 9.Дополнительные возможности ActiveRecord
 Обратные вызовы
 Регистрация обратного вызова
 Парные обратные вызовы before/after
 Прерывание выполнения
 Примеры применения обратных вызовов
 Особые обратные вызовы: after_initialize и after_find
 Классы обратных вызовов
 Наблюдатели
 Соглашения об именовании
 Регистрация наблюдателей
 Момент оповещения
 Наследование с одной таблицей
 Отображение наследования на базу данных
 Замечания об STI
 STI и ассоциации
 Абстрактные базовые классы моделей
 Полиморфные отношения has_many
 Случай модели с комментариями
 Замечание об ассоциации has_many
 Модули как средство повторного использования 
 общего поведения
 Несколько слов об области видимости класса и контекстах
 Обратный вызов included
 Модификация классов ActiveRecord во время выполнения
 Замечания
 Ruby и предметно-ориентированные языки
 Заключение
 
 Глава 10. ActionView
 Основы ERb
 Практикум по ERb
 Удаление пустых строк из вывода ERb
 Закомментирование ограничителей ERb
 Условный вывод
 RHTML? RXML? RJS?
 Макеты и шаблоны
 Подстановка содержимого
 Переменные шаблона
 Защита целостности представления от данных, 
 введенных пользователем
 Подшаблоны
 Простые примеры
 Повторное использование подшаблонов
 Разделяемые подшаблоны
 Передача переменных подшаблонам
 Рендеринг наборов
 Протоколирование
 Кэширование
 Кэширование в режиме разработки?
 Кэширование страниц
 Кэширование действий
 Кэширование фрагментов
 Истечение срока хранения кэшированного содержимого
 Автоматическая очистка кэша с помощью дворников
 Протоколирование работы кэша
 Подключаемый модуль Action Cache
 Хранилища для кэша
 Заключение
 
 Глава 11. Все о помощниках
 Модуль ActiveRecordHelper
 Отчет об ошибках контроля
 Автоматическое создание формы
 Настройка выделения ошибочных полей
 Модуль AssetTagHelper
 Помощники для формирования заголовка
 Только для подключаемых модулей: 
 добавление включаемых по умолчанию JavaScript-сценариев
 Модуль BenchmarkHelper
 Модуль CacheHelper
 Модуль CaptureHelper
 Модуль DateHelper
 Помощники для выбора даты и времени
 Помощники для задания отдельных элементов 
 даты и времени
 Параметры, общие для всех помощников, 
 связанных с датами
 Методы distance_in_time со сложными именами
 Модуль DebugHelper
 Модуль FormHelper
 Создание форм для моделей ActiveRecord
 Как помощники формы получают свои значения
 Модуль FormOptionsHelper
 Помощники select
 Другие помощники
 Модуль FormTagHelper
 Модуль JavaScriptHelper
 Модуль NumberHelper
 Модуль PaginationHelper
 will_paginate
 paginator
 Paginating Find
 Модуль RecordIdentificationHelper
 Модуль RecordTagHelper
 Модуль TagHelper
 Модуль TextHelper
 Модуль UrlHelper
 Написание собственных модулей
 Мелкие оптимизации: помощник Title
 Инкапсуляция логики представления: помощник photo_for
 Более сложное представление: помощник breadcrumbs
 Обертывание и обобщение подшаблонов
 Помощник tiles
 Обобщение подшаблонов
 Заключение
 
 Глава 12. Ajax on Rails
 Библиотека Prototype
 Подключаемый модуль FireBug
 Prototype API
 Функции верхнего уровня
 Объект Class
 Расширения класса JavaScript Object
 Расширения класса JavaScript Array
 Расширения объекта document
 Расширения класса Event
 Расширения класса JavaScript Function
 Расширения класса JavaScript Number
 Расширения класса JavaScript String
 Объект Ajax
 Объект Ajax.Responders
 Объект Enumerable
 Класс Hash
 Объект ObjectRange
 Объект Prototype
 Модуль PrototypeHelper
 link_to_remote
 remote_form_for
 periodically_call_remote
 observe_field
 observe_form
 RJS - пишем Javascript на Ruby
 RJS-шаблоны