Подклассы контроллеров и когда звонить супер - PullRequest
3 голосов
/ 21 марта 2012

У меня есть много контроллеров, которые будут иметь похожее поведение, например, пользователь должен войти в систему, необходимо настроить область действия, установить current_account / current_user и кэшировать разрешения.

Яподумайте об использовании стандартного контроллера и подклассе этого.

class MyStandardController < ApplicationController
 before_filter :xyz
end 

class SomeController < MyStandardController
end

Что мне интересно, так это то, нужно ли мне / когда вообще звонить super?

1 Ответ

5 голосов
/ 21 марта 2012

Вам не нужно когда-либо вызывать super внутри контроллера, который наследуется от другого контроллера; на самом деле, это было бы странно. Super выполняет метод с тем же именем из суперкласса, и у вас, вероятно, не будет методов для MyStandardController, которые вы переопределите в его дочерних элементах.

Основная причина сделать это, как вы сказали сами, получить фильтры и методы, легко распределенные между контроллерами. Мы делаем что-то похожее в наших приложениях, где одна область сайта с очень похожим поведением будет наследоваться от контроллера (например, ShoppingController), который имеет раздел частных удобных методов, которые могут использоваться только всеми его дочерними элементами.

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

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