版本控制葡萄 active_model_serializer

Versioning Grape active_model_serializer

我正在尝试使用 grape 和 grape_active_model_serializer 为我的 rails 应用制作 V2 api。但是我不知道如何为我的 api.

的每个版本制作序列化程序

这是我的 api 的样子

app/api/api.rb :

require 'grape-swagger'
class API < Grape::API
  prefix 'api'
  format :json
  formatter :json, Grape::Formatter::ActiveModelSerializers
  use ::WineBouncer::OAuth2

  <... some code here ...>

  mount V1::APIV1
  add_swagger_documentation api_version: 'v1',
                            hide_documentation_path: false,
                            hide_format: true
  mount V2::APIV2
  add_swagger_documentation api_version: 'v2',
                            hide_documentation_path: false,
                            hide_format: true
end

app/api/v1/apiv1.rb

module V1
  class APIV1 < Grape::API
    version 'v1', using: :path

    mount V1::UsersController
  end
end

app/api/v2/apiv2.rb

module V2
  class APIV2 < Grape::API
    version 'v2', using: :path

    mount V2::UsersController
  end
end

app/serializers/v1

class UserSerializer < ActiveModel::Serializer
  include Serializer

  attributes  :email,
              :username,
              :first_name,
              :last_name

app/serializers/v2

class UserSerializer < ActiveModel::Serializer
  include Serializer

  attributes  :email,
              :username,
              :first_name,
              :last_name,
              :phone_number,
              :adress

我添加到我的 config/application.rb

config.autoload_paths += Dir[Rails.root.join('app', 'serializers', '**/')]

目前,V1 和 V2 用户控制器返回相同的 json,但没有 phone 编号和地址,我如何告诉我的 v2 api 使用 v2 序列化器?

我正在使用 grape,grape-active_model_serializers,grape-swagger 和 grape-swagger-rails

实际上这很简单,在我尝试了巫术和萨满教之后 rails 给我提示,如果你把你的序列化器分成一些工作正常的模块,那么现在我有

 module V1
   class UserSerializer < ActiveModel::Serializer
    include Serializer

    attributes  :email,
          :username,
          :first_name,
          :last_name

 module V2
   class UserSerializer < ActiveModel::Serializer
    include Serializer

    attributes  :email,
          :username,
          :first_name,
          :last_name,
          :phone_number,
          :adress

我给出答案是因为我看到很多关于序列化程序版本的问题,抱歉英语不好,但我没有土豆 -)