使用 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 可以实现。
我有这段代码从我的模型 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 可以实现。