2010-07-04 128 views
9

每次提到我得到一個警告頂級恆定的ApplicationController鐵軌對我的要求是什麼?有什麼麻煩?Rails3中:警告:

相同的情況與其他控制器

class Agency::ClientsController < Agency::ApplicationController 
    ... 
end 

而且沒有警告,沒有錯誤...

回答

5

ApplicationController是Rails的,當你創建一個新的項目,所有爲您生成的超類控制器的名稱你的其他控制器類繼承自。可能有衝突的地方,因爲你已經使用了相同的名字,即使你把它放在一個命名空間中。

嘗試給你的Agency::ApplicationController一個不同的名字。

+0

但是,爲什麼沒有與出售:: ClientsController沒有煩惱? – petRUShka 2010-07-07 11:35:11

+1

因爲ClientsController對Rails沒有特殊的含義。 – 2010-07-07 12:32:34

+0

我有一個功能Admin :: ApplicationController,它不會產生問題。所以重命名不應該被要求。調用堆棧中的其他地方可能存在歧義,Ruby對此抱怨。 – 2012-01-04 15:54:37

2

在設置SporkWatchr後,我有類似的問題。在這個過程中,我關閉了類緩存(config_cache_classes => falseconfig/environments/test.rb),以便在spork環境中根據需要重新加載更改。轉向類緩存back on使警告消失。

7

我在我的Admin名稱空間控制器中運行SporkWatchr時遇到類似問題。所以我加入以下代碼spec_helper.rb固定到這個each_run塊:

Dir[File.expand_path("app/controllers/admin/*.rb")].each do |file| 
    require file 
end 

所有學分去guy from this thread

+1

謝謝,這已經解決了這個問題。 – 2012-01-10 10:22:41

+1

感謝這工作得很好,爲簡潔起見,我修改了一下:Dir [Rails.root.join(「app/controllers/admin/* .rb」)]。each {| f |需要f} – 2012-02-02 09:36:06

+0

幾小時後我的頭撞了..這解決了我的問題..好,我注意到警告和好,我發現這個答案..非常感謝。 – whizcreed 2012-07-18 13:15:40

12

我意識到這個問題是快兩歲了,但我最近通過another計算器偶然發現了這個希望分享一些見解。

基本上,如果您的命名空間Agency碰巧是class而不是module,您會看到該警告。在上面粘貼的stackoverflow後,他們有一個模型(classAdmin和他們的命名空間也是Admin

This提供了一個更好的解釋發生了什麼。

因此請檢查您的代碼是否未在某個地方定義Agency類。祝你好運。

2

對我而言,這是Devise的問題。我有一個設計模型管理員和命名空間路由管理員。將名稱空間路由更改爲管理員解決了問題。

0

解決方案對我來說是加入這一行:

# spec/rails_helper.rb 
Dir[File.expand_path("app/controllers/admin/*.rb")].each { |file| require file }