2014-07-04 33 views
3

我試圖創建4此控制器在Rails的未初始化常量'錯誤:軌道4 - 縮寫控制器內的命名空間給予

Admin::EDMsController 

在我的初始化/是inflections.rb文件,我已經定義了縮寫:

ActiveSupport::Inflector.inflections(:en) do |inflect| 
    inflect.acronym 'EDMs' 
    inflect.acronym 'EDM' 
end 

我的routes.rb文件有:

namespace :admin do 
    # ... some other resources ... 
    resources :edms 
end 

我的控制器定義如下在app /控制器/管理/ edms_controller.rb:

class Admin::EDMsController < Admin::AdminController 
end 

當我嘗試訪問/管理/ EDMS,我得到以下錯誤:

uninitialized constant Admin::EDMsController 

我已經發現迄今:

  • 如果我將它重命名爲Admin :: EdmsController並刪除變形定義(即一切,除了不是一個縮寫相同),它的工作原理
  • 如果我移動整個事情了管理員命名空間爲我的應用程序(即EDMsController,通過訪問/ EDMS)的根,它的工作原理

這是還值得注意的是,我在管理員命名空間中有其他控制器和資源可以正常工作。

所以看起來我可以有一個首字母縮略詞控制器,或者是一個命名空間內的控制器,但不能同時存在。

有什麼建議嗎?

+0

我覺得it's因爲縮寫啄,我在api文檔中查找了rails 4,但我沒有找到它。也許它被刪除了。 – emerak

+0

@emerak你的意思是ActiveSupport :: Inflector :: Inflections.acronym?如果是這樣,它仍然存在http://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html#method-i-acronym – pricj004

+0

嗯檢查關於首字母縮寫複數化的說明,認爲這就是答案 – emerak

回答

5

看起來這是一個固定在4.2的錯誤:https://github.com/rails/rails/pull/14146

如果不能升級,這應該工作:

irb(main):001:0> ActiveSupport::Inflector.inflections(:en) { |inflect| inflect.acronym 'Admin/EDMs' } 
=> /Admin\/EDMs/ 
irb(main):002:0> 'Admin::EDMsController'.underscore 
=> "admin/edms_controller" 
0

我發現使用irregular的效果很好,因爲它強制某些起始詞直接轉換爲結果。

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.irregular 'delta', 'deltas' 
end 
+0

這沒有奏效。試過inflect.irregular'edm','EDMs'但沒有運氣。 – pricj004