2.3.4 Иерархия наследования
Мы заканчиваем наше обсуждение демонстрационного приложения кратким описанием иерархии классов контроллеров и моделей в Rails. Это обсуждение будет иметь много смысла, только если у Вас был некоторый опыт объектно-ориентированного программирования (ООП); если Вы не изучали ООП, не стесняйтесь пропустить этот раздел. В частности, если Вы незнакомы с классами (обсуждаемыми в Разделе 4.4), я предлагаю вернуться к этому разделу позже.
Мы начнем со структуры наследования для моделей. Сравнивая Листинг 2.12 и Листинг 2.13, мы видим, что и модель User и модель Micropost наследовались (через левую угловую скобку <
) от ActiveRecord::Base
, которая является базовым классом для моделей, обеспеченных ActiveRecord; схема, резюмирующая это отношение, представлена в Рис. 2.16. Благодаря наследованию от ActiveRecord::Base
наши объекты модели получают возможность связываться с базой данных, обрабатывать столбцы базы данных, как Ruby атрибуты, и так далее.
app/models/user.rb
class User < ActiveRecord::Base . . . end
app/models/micropost.rb
class Micropost < ActiveRecord::Base . . . end

Рис. 2.16 Иерархия наследования для моделей User и Micropost.
Структура наследования для контроллеров лишь немногим более сложная. Сравнивая Листинг 2.14 и Листинг 2.15, мы видим, что и контроллер User и контроллер Micropost наследовались от Application controller. Исследуя Листинг 2.16, мы видим, что сам ApplicationController
наследует от ActionController::Base
; это базовый класс для контроллеров, обеспеченных Action Pack библиотекой Rails. Отношения между этими классами иллюстрируются в Рис. 2.17.
UsersController
, с наследованием.app/controllers/users_controller.rb
class UsersController < ApplicationController . . . end
MicropostsController
, с наследованием.app/controllers/microposts_controller.rb
class MicropostsController < ApplicationController . . . end
ApplicationController
, с наследованием.app/controllers/application_controller.rb
class ApplicationController < ActionController::Base . . . end

Рисунок 2.17: Иерархия наследования для контроллеров Users и Microposts.
Как и с наследованием моделей, будучи, в конечном счете, наследниками ActionController::Base
и Users и Microposts контроллеры имеют большое количество функций, таких как возможность управлять объектами модели, фильтровать входящие запросы HTTP, и визуализировать представления как HTML. Так как все контроллеры Rails наследовались от ApplicationController
, правила, определенные в ApplicationController автоматически, применяются к каждому действию в приложении. Например, в Разделе 8.2.4 мы увидим, как определение правила в Application контроллере позволяет нам фильтровать пароли от всех файлов системного журнала Rails, таким образом избегая серьезного потенциального нарушения защиты.