【发布时间】: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