2011-08-21 83 views
0

我實現了單表繼承,但是在路由方面有些麻煩。我有兩個類,Gamma和Beta,都從Alpha繼承。我知道如果我想使用Alpha作爲控制器而不是單獨的Beta和Gamma控制器,我可以按照說明here將資源默認爲另一個控制器。Rails - 單表繼承和路由

但是,我想要做的是有一些方法,通過中央控制器的Alpha(例如編輯和更新)進行處理,而其他方法由子類β和γ控制器來處理。我怎樣才能指定哪些方法應該指向Alpha控制器,哪些應該保持由Beta和Gamma處理?

+0

你需要將../alpha/edit地址或對它們進行../beta/edit和../gamma/edit? – link664

+0

我想理想情況下,我希望所有這些工作,但指向在阿爾法控制器的編輯方法。 – Kvass

回答

0

在控制器中使用繼承。在AlphaController類中實現編輯和更新功能,然後繼承該類中的類BetaControllerGammaController類,然後在其中實現其他函數。

class AlphaController < ActionController::Base 

    def edit 
     ... 
    end 

    def update 
     ... 
    end 

end 

class BetaController < AlphaController 

    def index 
     ... 
    end 

end 

請注意,這會使您的網址.../beta /編輯和.../beta /更新。

你只需要使用的意見/阿爾法/ edit.html.erb的局部視圖,然後渲染阿爾法視圖頁面,在你的β/γ意見的部分。

請記住,即使你是存儲在一個表中的Alpha的對象,你仍然有兩個班在模型中,β和γ,並且應該這樣對待他們。

+0

這是除了用'resources:betaas,:controller =>「alphas」'等修改路線文件還是我不碰我的路線文件? – Kvass

+0

您不需要觸摸您的路線文件。 BetaController將從AlphaController繼承編輯或更新的實現,以便在訪問.../beta/edit時,就好像您已經爲BetaController定義了該編輯功能。 – link664

+0

好的,但是如果我在view/alphas/edit.html.erb中有一個單一的視圖,我想要爲beta和gamma渲染?有沒有辦法做到這一點,而不是在明確呈現alpha視圖頁的beta和gamma視圖中創建文件? – Kvass