【问题标题】:ActiveModel Serializer won't look up serializer class implicitly, to get json serialized correctly the serializer has to be explicitly passedActiveModel Serializer 不会隐式查找序列化程序类,要正确序列化 json,必须显式传递序列化程序
【发布时间】:2016-07-19 19:13:59
【问题描述】:

我的 Rails 4.2.6 项目中使用 ActiveModel 序列化器 (v0.10.2) 时遇到问题。我遇到的问题是,如果没有将序列化程序传递给控制器​​中的渲染调用,rails 将不会使用任何序列化程序并像往常一样渲染对象。但是,将序列化程序类名称传递给它可以按预期工作。

render json: @tag  # renders the whole object as if just to_json was called
render json: @tag, serializer: API::V1::TagSerializer # renders it correctly through the serializer

当前,控制器 this 位于版本化 api 命名空间 API::V1::Tags

我有一个 action_model_serializers 初始化器,它的内容是:

ActiveModelSerializers.config.adapter = :json_api
ActiveModelSerializers.config.key_transform = :camel_lower
ActiveModelSerializers.config.serializer_lookup_enabled = true

我的序列化器位于app/serializers/api/v1/tag_serializer.rb

class API::V1::TagSerializer < ApplicationSerializer
  attributes :id, :name, :created_at, :updated_at

  has_many :taggings, serializer: API::V1::TaggingSerializer

  link :self do
    api_v1_tag_url(object, host: 'localhost:3000')
  end
end

我不太确定出了什么问题,我已尝试重新启动所有内容,我已将 ActionController::Serialization 包含在我的应用程序控制器中,但我没有尝试过。

不确定这是否是一个相关问题,但即使在渲染函数中添加了include: 'taggings',并且在序列化程序中添加了has_many :taggings, serializer: API::V1::TaggingSerializer,关系中唯一呈现的是标记id和type: 'taggings'

【问题讨论】:

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


    【解决方案1】:

    我有同样的问题,我也在做名称间距。我认为this answer and comments 仍然相关

    因为我确实想要命名我的序列化程序 (api:v1),以便我可以在下一个版本中换入新的序列化程序,所以我只保留了显式调用。如果有更好的答案,我很想听听

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-02
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 2017-05-16
      • 1970-01-01
      • 2018-07-04
      相关资源
      最近更新 更多