【问题标题】:ActiveModel::Serializers Gem - Versioned API Namespacing IssueActiveModel::Serializers Gem - 版本化 API 命名空间问题
【发布时间】:2013-03-17 16:44:41
【问题描述】:

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

我的控制器的命名空间是这样的:

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 版本一起命名空间的最佳方法是什么?

【问题讨论】:

  • 请务必在配置序列化程序后重新启动服务器。在我的情况下,使用rails restart 重新启动服务器不起作用,但在服务器终端上使用 ctrl+c 重新启动是有效的。

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


【解决方案1】:

注意命名空间应该与文件夹结构相匹配:

# 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

【讨论】:

  • 值得注意的是,ActiveModel 序列化器真的不喜欢被命名空间,这是因为序列化器与模型(而不是视图或端点)配对,并且模型通常没有版本控制。我不确定我是否同意这个决定,但这就是核心团队的决定。
  • @Intentss 很有趣,有没有办法为它们命名空间以进行版本控制?
猜你喜欢
  • 2014-09-27
  • 2011-09-16
  • 2019-11-30
  • 2016-10-21
  • 2018-11-26
  • 2015-03-03
  • 2017-11-01
  • 2012-09-18
  • 2011-02-05
相关资源
最近更新 更多