Rails API 版本控制,AMS 不使用自定义序列化程序
Rails API versioning, AMS doesn't use custom serializers
我正在开发一个 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
{"id":1,"name":"...","city":"...","created_at":"...","updated_at":"2..."}
而不是
{"id":1}
如果我输入 render json: @resources, serializer: ResourceSerializer
它会检索 undefined method 'read_attribute_for_serialization'
如有任何帮助,我们将不胜感激。谢谢!
编辑: 命名空间有效!
我也遇到了这个问题,我尝试了很多解决方案,但都不适合我
唯一可行的解决方案是直接调用序列化器class:
render json: V1::ResourceSerializer.new(@resource)
如果您的问题只有 "undefined method 'read_attribute_for_serialization'",请将 ActiveModel::Serialization
包含到您的 ActiveModel sub class
module V1
class ResourceSerializer < ActiveModel::Serializer
include ActiveModel::Serialization
attributes :id
end
end
我终于找到了一个解决方案,对 collections
使用 each_serializer: V1::UserSerializer
,对普通对象使用 serializer: V2::UserSerializer
。
感谢大家。
我正在开发一个 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
{"id":1,"name":"...","city":"...","created_at":"...","updated_at":"2..."}
而不是
{"id":1}
如果我输入 render json: @resources, serializer: ResourceSerializer
它会检索 undefined method 'read_attribute_for_serialization'
如有任何帮助,我们将不胜感激。谢谢!
编辑: 命名空间有效!
我也遇到了这个问题,我尝试了很多解决方案,但都不适合我
唯一可行的解决方案是直接调用序列化器class:
render json: V1::ResourceSerializer.new(@resource)
如果您的问题只有 "undefined method 'read_attribute_for_serialization'",请将 ActiveModel::Serialization
包含到您的 ActiveModel sub class
module V1
class ResourceSerializer < ActiveModel::Serializer
include ActiveModel::Serialization
attributes :id
end
end
我终于找到了一个解决方案,对 collections
使用 each_serializer: V1::UserSerializer
,对普通对象使用 serializer: V2::UserSerializer
。
感谢大家。