2013-03-17 22 views
2

我是新來的導軌和模塊/命名空間::加載ActiveModel串行器寶石 - 版本化API命名空間問題

我的控制器命名空間是這樣的:

module Api 
    module V1 
    class PostsController < ApiController 

加載ActiveModel和串行器::把「串行器「文件夾在我的應用程序文件夾,並在裏面,我已經創建了一個包含下面的代碼post_serializer.rb:

class PostSerializer < ActiveModel::Serializer 
    attributes :id, :body, :category, 
end 

當我試圖訪問JSON響應我得到:

NameError at /api/v1/posts 
uninitialized constant Api::V1::PostsController::PostSerializer 

這裏有什麼問題,命名空間我的串行器與我的API版本一起的最佳方式是什麼?

回答

7

注意,命名空間應匹配的文件夾結構:

# should be in app/controllers/api/v1/posts_controller.rb 
module Api 
    module V1 
    class PostsController < ApiController 

# should be in app/serializers/post_serializer.rb 
class PostSerializer < ActiveModel::Serializer 

使用PostSerializer沒有前綴時,則認爲是當前的命名空間。如果引用全局命名空間,請使用::PostSerializer

+0

值得注意的是,ActiveModel串行器真的不喜歡命名空間,這是因爲序列化器與模型(而不是視圖或端點)配對,並且模型通常不是版本。我不確定我是否同意這個決定,但那就是核心團隊決定的。 – Intentss 2014-04-22 20:21:37

+0

@Intentss有趣的是,有沒有什麼辦法命名空間他們的版本呢? – geoboy 2017-09-07 01:46:00