我實現了單表繼承,但是在路由方面有些麻煩。我有兩個類,Gamma和Beta,都從Alpha繼承。我知道如果我想使用Alpha作爲控制器而不是單獨的Beta和Gamma控制器,我可以按照說明here將資源默認爲另一個控制器。Rails - 單表繼承和路由
但是,我想要做的是有一些方法,通過中央控制器的Alpha(例如編輯和更新)進行處理,而其他方法由子類β和γ控制器來處理。我怎樣才能指定哪些方法應該指向Alpha控制器,哪些應該保持由Beta和Gamma處理?
我實現了單表繼承,但是在路由方面有些麻煩。我有兩個類,Gamma和Beta,都從Alpha繼承。我知道如果我想使用Alpha作爲控制器而不是單獨的Beta和Gamma控制器,我可以按照說明here將資源默認爲另一個控制器。Rails - 單表繼承和路由
但是,我想要做的是有一些方法,通過中央控制器的Alpha(例如編輯和更新)進行處理,而其他方法由子類β和γ控制器來處理。我怎樣才能指定哪些方法應該指向Alpha控制器,哪些應該保持由Beta和Gamma處理?
在控制器中使用繼承。在AlphaController
類中實現編輯和更新功能,然後繼承該類中的類BetaController
和GammaController
類,然後在其中實現其他函數。
class AlphaController < ActionController::Base
def edit
...
end
def update
...
end
end
class BetaController < AlphaController
def index
...
end
end
請注意,這會使您的網址.../beta /編輯和.../beta /更新。
你只需要使用的意見/阿爾法/ edit.html.erb的局部視圖,然後渲染阿爾法視圖頁面,在你的β/γ意見的部分。
請記住,即使你是存儲在一個表中的Alpha的對象,你仍然有兩個班在模型中,β和γ,並且應該這樣對待他們。
這是除了用'resources:betaas,:controller =>「alphas」'等修改路線文件還是我不碰我的路線文件? – Kvass
您不需要觸摸您的路線文件。 BetaController將從AlphaController繼承編輯或更新的實現,以便在訪問.../beta/edit時,就好像您已經爲BetaController定義了該編輯功能。 – link664
好的,但是如果我在view/alphas/edit.html.erb中有一個單一的視圖,我想要爲beta和gamma渲染?有沒有辦法做到這一點,而不是在明確呈現alpha視圖頁的beta和gamma視圖中創建文件? – Kvass
你需要將../alpha/edit地址或對它們進行../beta/edit和../gamma/edit? – link664
我想理想情況下,我希望所有這些工作,但指向在阿爾法控制器的編輯方法。 – Kvass