Наследование контроллера как реализовать абстрактный контроллер

Учитывая, что у меня есть класс A, который является абстрактным и инкапсулирует логику, которая необходима в декандантах 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

Действие контроллера обычно не имеет параметров. Но так как ACcontroller должен быть абстрактным, этот подход может быть действительным или лучше полагаться на переменные экземпляра и просто вызывать super, а затем вытаскивать нужную информацию из переменных вместо этого?

Любые идеи приветствуются.

Изменить 1:

К счастью, Lateralu42 предложил проблемы, заставляющие меня задуматься; хорошо, в чем мой реальный вопрос, здесь я хочу иметь андерсера? (Как в путеводителе по hitch hikers). Так что это также о том, чтобы использовать тот метод повторного использования кода?

Нашел хороший пост в блоге здесь.

+5
03 сент. '14 в 20:04
источник поделиться
1 ответ

Собственно, я думаю, что ваша проблема может быть решена с использованием шаблона проблем (модуль, разделяемый между контроллерами или моделями): Как использовать проблемы в Rails 4

+2
04 сент. '14 в 17:31
источник

Посмотрите другие вопросы по меткам или Задайте вопрос