2015-05-25 88 views
1

當我運行我的測試時,我得到一個錯誤undefined常量Admin :: Blog :: Category。瞭解命名空間

模型的定義,像這樣:

module Blog 
    class Category < ActiveRecord::Base 
    ... 
    end 
end 

當我試圖從我的管理控制器調用它,我得到的錯誤。控制器的定義,像這樣:

module Admin 
    module Blog 
    class CategoriesController < Admin::AdminController 
     ... 
    end 
    end 
end 

我的問題是這樣的命名空間的錯誤,或我怎麼叫博客::分類模式?

回答

1

您需要將它稱爲::Blog::Category.all,例如,獲取控制器內的所有類別。點點滴滴地瞭解搜索將如何進行。

module Blog 
    class Category 
    #... 
    end 
end 

module Admin 
    module Blog 
    class Categories 
     def self.class_name 
     Module.nesting 
     end 
    end 
    end 
end 

Admin::Blog::Categories.class_name 
# >> [Admin::Blog::Categories, Admin::Blog, Admin] 

之後它將在頂層搜索。讓我們來看看兩個例子:

module Blog 
    class Category 
    #... 
    end 
end 

Category = 12 

module Admin 
    module Blog 
    class Categories 
     def self.const_value 
     Category 
     end 
    end 
    end 
end 

Admin::Blog::Categories.const_value # => 12 

和,現在...

module Blog 
    class Category 
    #... 
    end 
end 

Category = 12 

module Admin 
    Category = 11 
    module Blog 
    class Categories 
     def self.const_value 
     Category 
     end 
    end 
    end 
end 

Admin::Blog::Categories.const_value # => 11 

以上兩個例子之後,這個例子ofcourse,應該拋出錯誤:

​​

閱讀本指南tutorial到理解這個話題。

末完成:

module Blog 
    class Category 
    end 
end 

module Admin 
    module Blog 
    class Categories 
     def self.const_value 
     ::Blog::Category 
     end 
    end 
    end 
end 

Admin::Blog::Categories.const_value # => Blog::Category