首页 > 解决方案 > 使用 rails 5 在包含文件中设置自定义序列化程序

问题描述

我有这段代码从我的模型 Vacancy 中带来一个空缺,然后根据序列化程序 VacancyDetailSerializer 在 json 中呈现属性:

控制器

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

这里的事情是,在include: [:restaurant]我想指定一个自定义序列化程序时,就像我对空缺所做的那样,因为现在正在使用 RestaurantSerializer 的序列化程序,但我不想使用那个文件,有没有办法做到这一点包括?也许在控制器中,或者在序列化程序中?

标签: rubyserializationruby-on-rails-5active-model-serializers

解决方案


如果您在 中具有belongs_to :restaurant关联VacancyDetailSerializer,则serializer可以为此关联指定

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

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

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

或者可以实现自定义关联序列化程序查找。


推荐阅读