我正在使用Rails应用程序并且我正在对API进行版本控制。
关注RailsCast #350我有这个:
routes.rb
namespace :v1 do
#resources for version 1
end
namespace :v2 do
#resources for version 2
end
我使用active_model_serializer
我有app/serializers/v1/
和.../v2/
:
(/ v1)
module V1
class ResourceSerializer < ActiveModel::Serializer
attributes :id
end
end
(/ v2)
module V2
class ResourceSerializer < ActiveModel::Serializer
attributes :id, :data
end
end
但是Rails并没有调用我的自定义序列化程序。
module V1
class ResourcesController < ApplicationController
def show
@resource = Resource.find(params[:id])
render json: @resource
end
end
end
.../v1/resources/1
的OUTPUT
{"id":1,"name":"...","city":"...","created_at":"...","updated_at":"2..."}
{"id":1}
如果我提交 render json: @resources, serializer: ResourceSerializer
,则会检索 undefined method 'read_attribute_for_serialization'
任何帮助将不胜感激。谢谢!
编辑:命名空间有效!
答案 0 :(得分:0)
我也遇到了这个问题,我尝试了很多解决方案,但是对我来说不起作用
唯一有效的解决方案是直接调用序列化程序类:
render json: V1::ResourceSerializer.new(@resource)
如果您的问题只是“未定义的方法'read_attribute_for_serialization'”,请在您的ActiveModel子类中包含ActiveModel::Serialization
module V1
class ResourceSerializer < ActiveModel::Serializer
include ActiveModel::Serialization
attributes :id
end
end
答案 1 :(得分:0)
我终于使用each_serializer: V1::UserSerializer
为collections
和serializer: V2::UserSerializer
获得了普通对象的解决方案。
感谢所有人。