鉴于我有一个类A,它是一种抽象的,并且封装了后代B和C所需的逻辑。
class A
end
class B < A
end
class C < A
end
此外,如果有足够的路由为B和C提供路由,因此由相应的控制器处理。
为了解决问题,我将两个控制器的共享代码移动到一个“抽象”控制器中(永远不会被实例化,也没有路由到它的动作):
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
控制器动作通常没有参数。但是由于AController是抽象的,这种方法可能是有效的,或者更好地依赖实例变量并简单地调用super然后从变量中提取所需的信息呢?
欢迎任何见解。
编辑1:
谢天谢地,Lateralu42建议让我思考的问题;好吧,我真正的问题是什么,我想要一个anwser? (就像搭便车的徒步旅行者指南)。所以它也是 那么使用哪种代码重用方法呢?
发现了一篇不错的博文here。