使子类无法访问实例方法

Making an instance method inaccessible from a subclass

给定:

class Base
  def foo
    puts 'foo!!!'
  end
end

class Ball < Base
end

我要:

  1. Ball.new.foo 到 return 一个错误:No Method Found.
  2. Base.new.foo 到 return: foo!!!.

我的尝试是:

关于如何使 1. 和 2. 都起作用的任何想法?

问题背景

我有一个 ApplicationController 操作 def routing_error 可以处理所有剩余的未定义路由。这个问题是所有其他继承 ApplicationController 的控制器也继承了那个动作,我希望它不是。我可以仅使用操作 def routing_error 创建一个单独的控制器,但我觉得这太过分了,首先想知道是否有另一种方法可以解决这个问题。

做:

class Ball < Base
  undef_method :foo
end

如果您想取消定义许多 class 的方法,并且不想为每个方法编写上面的代码,请在两者之间创建一个 class。

class Dummy < Base
  undef_method :foo
end

class Base < Dummy
end

class Base2 < Dummy
end

...