ActiveModel :: Serializers Gem - Versioned API命名空间问题

时间:2013-03-17 16:44:41

标签: ruby-on-rails ruby active-model-serializers

我是Rails和模块/命名空间的新手

My Controller的命名空间如下:

module Api
  module V1
   class PostsController < ApiController

ActiveModel :: Serializers在我的app文件夹中放了一个“Serializers”文件夹,在其中,我创建了包含以下代码的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版本的最佳方法是什么?

1 个答案:

答案 0 :(得分: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