您可以将Task也转换成一个子类,然后让每个子类继承一些公共的东西(尽可能使用上面的名称)
class Task
belongs_to :template
end
class Subtask1 < Task
include subtask_file
end
# this used to be Task, now is Subtask2
class Subtask2 < Task
include task_file
end
或者,您将共享功能移到自己的模块中,然后将其包括在内,并完全避免使用超类/子类(我会选择这个)。
module TaskShared
belongs_to :template
end
class Task
include TaskShared
include task_file
end
class Subtask
include TaskShared
include subtask_file
end
module TaskShared
def self.included(klass)
klass.belongs_to :template
end
end
请注意,有些情况下这会变得很棘手,例如从ActiveRecord::基类继承。