0

我在我的Rails應用中添加了一個可掛載的引擎,它提供了類似論壇的功能(即添加問題,答案,評論等)。一切工作正常發展。然而,在登臺/製作時,我在嘗試創建答案時發生錯誤,特別是CanCan權限錯誤(儘管我認爲這可能是一個紅鯡魚)。但是感覺ti可能與命名空間或名稱衝突有關?將`cache_classes`設置爲`false`修復了我的錯誤。接下來做什麼?

無論如何,當我在我的環境配置文件中設置config.cache_classes = false時問題消失。但這不是一個可以接受的解決方案,因爲它確實減慢了速度。

我該從哪裏出發?我怎樣才能找出哪些類需要重新加載?傳統的解決這個問題的方法是什麼?

我正在使用Rails 3.1。

回答

3

我想出了這個問題。這是引導順序的問題。我的Engine::AnswersController正在我的Engine::ApplicationController之前加載。而在我的代碼中,我從ApplicationController繼承。這意味着,因爲Engine::AnswerController不知道關於Engine::ApplicationController,它錯誤地繼承了主應用程序的ApplicationController而不是引擎的ApplicationController

此修復程序是強制的答案控制器通過使發動機命名空間明確從發動機繼承,而不是主要的應用程序:

Engine::AnswersController < Engine::ApplicationController 

我明白這個問題比較特質,以我的應用程序,但我如何到達在解決方案可能會有助於其他人。如果您遇到這種類型的問題,請下載到某種類型的調試器(我使用Pry)並開始檢查事情。具體來說,檢查哪些類被加​​載並且在繼承鏈上看起來很難(即Engine::ApplicationController.ancestors)。尋找任何看起來很奇怪的東西。

另外,如果問題與引擎相關,則可能需要在引擎和主應用程序中都放置調試器。調試引擎可能很困難,因爲引擎中發生的錯誤可能不一定會冒泡到主應用程序。

非常感謝tjbladez幫我解決這個問題。

相關問題