版本控制ActiveModel :: Serializer

我正在使用gem active_model_serializers ,我正面临着版本控制的一些问题。

控制器

app/controllers/v1/contracts_controller.rb

 module V1 class ContractsController < ApiController def index @contracts = Contract.all render json: @contracts end end end 

app/controllers/v2/contracts_controller.rb

 module V2 class ContractsController < ApiController def index @contracts = Contract.all render json: @contracts end end end 

串行器

app/serializers/v1/contract_serializer.rb

 class ContractSerializer < ActiveModel::Serializer attributes :id end 

app/serializers/v2/contract_serializer.rb

 class ContractSerializer < ActiveModel::Serializer attributes :id, :name end 

无论我调用route /v1/contracts还是/v2/contracts ,渲染的json都包含合约名称,这意味着v2中的序列化程序似乎总是被调用。

仅供参考,我在config/application.rb添加了config.autoload_paths += Dir[Rails.root.join('app', 'serializers', '**/')]

您需要在控制器中指定序列化器,例如我的答案