Дано:Создание метод экземпляра недоступен из подкласса
class Base
def foo
puts 'foo!!!'
end
end
class Ball < Base
end
Я хочу:
Ball.new.foo
вернуть ошибку:No Method Found
.Base.new.foo
для возврата:foo!!!
.
Мои попытки:
- я мог сделать
protected def foo
, так что 1. Работы. Однако это не работает для 2. - Я мог бы сделать это точно так же, как это указано выше, чтобы 2. работал. Однако 1. не работает.
Любые идеи как сделать как 1., так и 2. работать?
предысторию проблемы
У меня есть ApplicationController
действие def routing_error
, который обрабатывает все остальные неопределенные маршруты. Проблема с этим - все остальные контроллеры, которые наследуют ApplicationController
, также наследуют это действие, в котором я хотел, чтобы это не так. Я мог бы создать отдельный контроллер только с действием def routing_error
, но я чувствую, что это слишком много, и сначала интересно, если есть другой способ решить эту проблему.
Это решило мой вопрос. Тем не менее, что касается корня моей проблемы, мне понадобится поставить 'undef_method: foo' всем моим контроллерам. Может быть, я могу сделать это сейчас. Благодаря! –
'ObjectSpace.each_object (класс) .select {| klass | Класс
mudasobwa
@mudasobwa, спасибо! это тоже поможет :) Мне просто нужно обязательно вызвать эту строку в конце всего кода приложения. –