2013-12-19 58 views
1

有没有一种很好的DRY方式来重构我的控制器?我所有的控制器看起来确实只是改变型号名称相同,例如Ruby on Rails ApplicationController REST风格的动作

class ModelnamesController < ApplicationController 
    def index 
     @modelnames = Modelname.find(:all) 
    end 

    def new 
     @modelname = Modelname.new 
    end 
    ... 
end 

等了7个默认的REST行动(指数,新,创建,更新,销毁,编辑,更新),我所有的控制器只是改变模型名称,所以,有没有办法将该代码放在ApplicationController上,以便我的ModelnamesController和其他所有模型控制器仅从ApplicationController扩展而来,如果我需要使某个动作不同而只是覆盖该动作?,我很希望我的控制器是这样的:

class ModelnamesController < ApplicationController 
end 
+0

尝试Modelname.All而不是find(:all) –

+0

@SamD我想知道的是,是否有办法将操作放在applicationcontroller中,并且它们适用于每个模型 – joseramonc

+2

它的目标是https:// github.com/josevalim/inherited_resources由cancan – apneadiving

回答

2

我建议你使用Inherited Resources,它可以直接使用,并且可以通过像Cancan和activeAdmin这样的宝石在场景后面使用。

-1

你基本上要求ApplicationController不只有主控制器才能处理信息路由(应用层路由)。这打破了MVC模式的意图,因为该模式是针对每个实体应用的。它将技术从业务中分离出来(无论您是在编写应用程序),从而在应用程序的整个生命周期中维护和扩展性可能会成为噩梦。在RoR应用程序中路由工作的方式是多余的,因为路由(以及MVC的实现)适用于命名约定,这些约定旨在提供解决方案和业务之间充分但不负担的耦合。

你不想要Ruby或Rails,你想要Pi微积分。