Ошибка при удалении «:: Base» из ActionController - PullRequest
1 голос
/ 11 марта 2012

Я пишу приложение rails, и в этом одном контроллере мне нужно указать макет для рендеринга из-за наследования от ActionController::Base. В некоторых других моих контроллерах у меня просто есть ActionController, и он автоматически использует макет приложения. Всякий раз, когда я удаляю ::Base, я получаю следующее сообщение при доступе к странице superclass must be a Class (Module given).

Почему наследование от ActionController::Base в этом контроллере имеет значение, но не в других?

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

Чтобы прямо ответить на ваш вопрос ActionController это не класс контроллера, это модуль пространства имен, который питает весь стек контроллера. Вы не будете взаимодействовать с модулем ActionController во время типичной разработки Rails. ActionController::Base на самом деле класс, от которого наследуются контроллеры. Вот почему вы не можете наследовать от ActionController.

Но я думаю, что здесь есть два контроллера. ActionController::Base и ApplicationController. Я думаю, вы можете ошибочно принять ApplicationController за ActionController без ::Base.

ActionController::Base - это основной класс контроллеров, откуда берутся все ваши функции Rails. ApplicationController - это обобщенный контроллер, к которому вы можете добавлять методы и наследовать все остальные контроллеры Rails.

Вы можете сделать следующее, чтобы использовать другую компоновку в одном из ваших контроллеров:

class AuthenticationController < ApplicationController
  layout 'authentication'
end

Вы можете использовать AuthenticationController напрямую или получить новые контроллеры, наследуемые от AuthenticationController.

0 голосов
/ 11 марта 2012

Ваши контроллеры должны наследовать от ApplicationController. Это позволит им автоматически отображать макет приложения. ApplicationController расширяет ActionController :: Base.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...