控制器继承如何实现的抽象控制器

问题描述:

鉴于我有一个类A,其是种抽象并封装所需要在decendants乙逻辑和C.控制器继承如何实现的抽象控制器

class A 
end 

class B < A 
end 

class C < A 
end 

此外,如果有路由随机应变它提供了路由B和C,因此由相应的控制器处理。

为了干涸事我移动既conntrollers的共享码成“抽象”控制器(从未被实例化,并且以它的行动没有路由):

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 

控制器动作usally没有参数。但是由于AController的目的是抽象的,这种方法可能是有效的,还是依赖于实例变量,只需调用super,然后从变量中提取所需信息,会更好?

任何见解欢迎。

编辑1:

值得庆幸的是Lateralu42建议关注这让我思考;好的我在这里真正的问题是什么,我想要有一个anwser? (喜欢在顺利徒步旅行者指南)。那么关于那么使用哪种代码重用方法呢也是 ?

找到一篇不错的博文here

+2

你的做法是正确的。仅仅因为这是控制器,并不意味着你不能拥有带参数的方法,而必须依赖于实例变量。 – 2014-09-03 22:34:56

其实,我觉得你的问题可以通过关注模式(模块控制器或模型之间共享)来解决:How to use concerns in Rails 4

+0

我也很熟悉担忧,但对我来说他们似乎不适合在这里,因为我只想分享功能,只有他们是AController。 – jethroo 2014-09-04 19:19:43