2015-05-04 1 views
2

Когда мы перемещаемся по страницам в приложении rails, inturn мы вызываем одну из функций, определенных в классе контроллера. Допустим, мы обращаемся к localhost: 3000/articles/new, тогда новое действие (метод) класса ArticlesController вызывается/вызывается. Это просто.Как объект классов контроллера создается в Rails?

Но я не могу понять, так как класс ArticlesController является чистым классом Ruby с некоторыми методами, и нам нужен экземпляр этого класса для вызова одного из его методов. Но мы никогда этого не делаем. Тогда как возможен вызов функции любого контрольного класса?

+0

Это что-то вроде Rails, чтобы удалить необходимость вручную создавать все, что нужно нашему приложению. В любом случае среда создает экземпляры действий на основе маршрутизации, которая использует соглашение для определения полного имени класса. Конвейер обработки запросов отвечает за создание экземпляра соответствующего класса и вызов соответствующего метода. –

ответ

1

RouteSet генерирует экземпляры любого контроллера по требованию, исходя из потребностей системы маршрутизации ActionDispatch. См. here, как это делается.

Поэтому, если вы не тестируете контроллер напрямую, вы можете положиться на маршрутизатор, чтобы предоставить вам экземпляр контроллера. И если вы тестируете напрямую, вы должны использовать ActiveController::TestCase, чтобы выполнить эту работу за вас.

1

Контроллер инициализируется автоматически рельсами. В частности, this вызывает метод action класса контроллера, который делает фактическое initialization.