我在使用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}}
答案 0 :(得分:0)
我有同样的问题,我也在做名字间距。我认为this answer and comments仍然相关
因为我确实想要命名我的序列化器(api:v1),所以我可以在下一个版本中交换新的序列化器,我只是保持显式调用。如果有更好的答案,我很乐意听到它