2013-05-15 62 views
0

我可以在Rails中擁有3級深度繼承的控制器嗎?人們會認爲這樣一個微不足道的事情是可能的,但在「第三」級別的具體控制器給出了「未初始化的常量Ns2 :: SecondController」的通用/無用的錯誤可以將導軌控制器繼承到第三層深嗎?

這基本上與此代碼(我還沒有試試這個確切的代碼)

module Ns3 
    class ThirdController < Ns2::SecondController 
    end 
end 

module Ns2 
    class SecondController< Ns1::FirstController 
    end 
end 

module Ns1 
    class FirstController< ApplicationController 
    end 
end 

注意:在路由和所有這些目錄中的命名空間的使用應設置正確。

我確定我可以重新排列邏輯並獲得與mixin或helper一起工作的東西。但是,我想直接問題爲我自己的利益回答。 Y/N或通過錯誤的方式。對重構解決方案ATM不感興趣。雖然我猜它不會受傷。

謝謝

+0

什麼是對的,你磁盤的佈局r控制器 –

+0

所有顯示的命名空間都符合所需的語法。上面是一個例子,我顯然沒有這些名字。我可以得到兩個深度沒有問題,第三個似乎是一個問題。 – Maximegalon

回答

0

這可以做到。

但是它看起來RoR很奇怪,而且你必須隱式指定基類的名字空間。如果你讓它默認爲當前的命名空間,它會變得奇怪。

0

它很可能是類名或文件名中的拼寫錯誤。

你需要把班爲Rails自動加載正確的文件/目錄結構的工作,如:

#/controllers/ns3/third_controller.rb 
module Ns3 
    class ThirdController < Ns2::SecondController 
    end 
end 

#/controllers/ns2/second_controller.rb 
module Ns2 
    class SecondController < Ns1::FirstController 
    end 
end 

#/controllers/ns1/first_controller.rb 
module Ns1 
    class FirstController < ApplicationController 
    end 
end 

另一件事,試圖從根命名空間範圍界定所以有::前綴,像這樣:

module Ns1 
    class SecondController < ::Ns1::FirstController 
    end 
end 

你也試試這個:

#/controllers/ns3/third_controller.rb 
class Ns3::ThirdController < ::Ns2::SecondController 
end