我想将一堆来自子类的通用代码分解成一个超类方法。超类方法必须引用将在子类中定义的不存在的(在超类中)方法。但我无法让它工作。
这是我尝试过的多种变体中的一种:
class Superclass
def chunk_of_code
# <code...>
nonexistant_superclass_method_defined_in_subclass params
# <more code...>
end
end
class Subclass < Superclass
def nonexistant_superclass_method_defined_in_subclass params
# whatever...
end
end
Subclass.new.chunk_of_code params
这行不通。其他变体也不起作用。这种编码在 Ruby 中是否可行(我以为是)?我在 Smalltalk 工作时一直在做这种事情。
有什么方法可以实现我想要的吗?请避免建议我使用“mix-ins”或“modules”,因为我现在只想学习和使用 Ruby 的继承。
*运行最新版本的 Ruby。
谢谢。
编辑:这是在 Rails 应用程序中。超类是ApplicationController。
编辑:这是我尝试过的许多迭代之一的实际代码。这个特定的示例在视图中以“nil:NilClass 的未定义方法‘每个’”结束,显然是因为整个事情是在超级(未定义的地方)而不是子的上下文中运行的,或者至少这是我的解释:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :authenticate_registration!
# models and x defined in subclass
def index
models = x.where registration_id: current_registration.id
respond_to do |format|
format.html # index.html.erb
format.json { render json: models }
end
end
# more code here...
# ...
end
class PositionsController < ApplicationController
def x
Position
end
def models= blah
@positions = blah
end
# more code here...
# ...
end