ActiveModel Serializer不会隐式查找序列化程序类,要正确序列化json,必须明确传递序列化程序

时间:2016-07-19 19:14:00

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

我在使用ActiveModel Serializers(v0.10.2)的Rails 4.2.6项目中遇到了问题。我遇到的问题是如果没有序列化程序传递给控制器​​中的render调用,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

目前,控制器位于版本化的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和{ {1}}

1 个答案:

答案 0 :(得分:0)

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

因为我确实想要命名我的序列化器(api:v1),所以我可以在下一个版本中交换新的序列化器,我只是保持显式调用。如果有更好的答案,我很乐意听到它