使用 rails 5 在包含文件中设置自定义序列化程序

Set a custom serializer in the include file with rails 5

我有这段代码从我的模型 Vacancy 中提取一个空位,然后根据序列化器 VacancyDetailSerializer:

在 json 中渲染属性

Controller

vacancy = Vacancy.find(params[:id])    
render json: vacancy, serializer: VacancyDetailSerializer, 
                      include: [:restaurant]

这里的问题是,在 include: [:restaurant] 中,我想按照我对空缺的方式指定一个自定义序列化程序,因为现在正在使用 RestaurantSerializer 的序列化程序,但我不想使用它文件,有没有办法用 include 来做到这一点? 也许在控制器中,或者在序列化程序中?

如果你在VacancyDetailSerializer中有belongs_to :restaurant关联,那么这个关联的serializer可以是specified:

class VacancyDetailSerializer < ActiveModel::Serializer
  belongs_to :restaurant, serializer: AnotherRestaurantSerializer
end

或者可以通过提供一个块来覆盖它:

class VacancyDetailSerializer < ActiveModel::Serializer
  belongs_to :restaurant do
    AnotherRestaurantSerializer.new(object.restaurant)
  end
end

或者自定义 association serializer lookup 可以实现。