2013-12-19 83 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微積分。