Учитывая, у меня есть класс А, который является своего рода абстрактным и инкапсулирует логику, которая необходима в decendants B и C.Наследование как реализовать абстрактный контроллер
class A
end
class B < A
end
class C < A
end
Кроме того, если есть изобретательной маршрутизации, который обеспечивает маршруты для B и C, и поэтому обрабатываются соответствующими контроллерами.
высыхать, что я переехал общий код обоих conntrollers в «абстрактном» контроллера (никогда не инстанцирован и без каких-либо маршрутов в своих действиях):
class AController < ApplicationController
def new(additional_opts)
render locals: {base: "stuff"}.merge(additional_opts)
end
end
class BController < AController
def new
super(foo: 1)
end
end
class CController < AController
def new
super(bar: 1)
end
end
действию контроллера Usally не имеет параметров. Но так как ACcontroller должен быть абстрактным, этот подход может быть действительным или лучше полагаться на переменные экземпляра и просто называть super, а затем вытаскивать нужную информацию из переменных вместо этого?
Любые идеи приветствуются.
Edit 1:
К счастью Lateralu42 предложил Заботы, который заставляет меня думать о том, хорошо, в чем мой реальный вопрос, здесь я хочу иметь андерсера? (Как в путеводителе по hitch hikers). Так что также о том, какой метод повторного использования кода?
Обнаружено красивое сообщение в блоге here.
Ваш подход является правильным. Просто потому, что это контроллер, это не означает, что вы не можете иметь методы с параметрами и должны полагаться на переменные экземпляра. –