使用rails 5在json中渲染多个包含
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用rails 5在json中渲染多个包含相关的知识,希望对你有一定的参考价值。
我有这个代码,使用自定义序列化器呈现可变空位,并且还包括一个餐厅作为我的模型的一部分。
vacancy = Vacancy.find(params[:id])
render json: vacancy,
serializer: VacancyDetailSerializer,
include: [:restaurant]
问题是我想要包含多个对象和渲染,如下所示:
vacancy = Vacancy.find(params[:id])
render json: vacancy,
serializer: VacancyDetailSerializer,
include: [:restaurant, :total_vacancies]
在:total_vacancies
我想发送Vacancy.count
,但我不知道我是否必须通过序列化器,或包含,或如何做它。
据我所知,我只需要在对象后面加一个逗号,然后在include中指定另一个对象但是不起作用。
更新
P.D. total_vacancies不是表格,是我的空缺模型的一种方法
P.D.2。确实,如果我把total_vacancies
作为我的序列化程序中的一个属性就可以了,但是如果我每次都这样做,我会渲染这个json,每当我调用空位时它会重复total_vacancies
,例如,想象我有100个空位,然后我的json将我空位和total_vacancies
的所有参数写入100次而不是1次作为不同的对象
我假设TotalVacancies是另一个表。
你需要为每一个都有单独的序列化器,VacancyDetailSerializer
必须修改如下
如果TotalVacancies不是单独的表。如果TotalVacancies不是一个单独的表,那么使用我在下面评论的has_many
并使用其相应的Serializer:TotalVacanciesSerializer
class VacancyDetailSerializer < ActiveModel::Serializer
attributes :total_vacancies
#has_many :total_vacancies
has_one :restaurant
def total_vacancies
self.object.count
end
end
# total_vacancies_serializer.rb
class TotalVacanciesSerializer < ActiveModel::Serializer
end
# restaurant_serializer.rb
class RestaurantSerializer < ActiveModel::Serializer
end
你不需要在渲染中包含这样的东西。由于我们在Vaconcies Serializer中添加了以下代码,其本身应包括Total Vacancies和Restaurant
您还可以控制Restaurant和TotalVacancies中的属性列表
vacancy = Vacancy.find(params[:id])
render json: vacancy,
serializer: VacancyDetailSerializer
Ian Lewis在Facebook上给出的解决方案:
只是简单地说
render json: { vacancy: vacancy, vacancy_count: Vacancy.count }
然后一切都很完美,最终的代码是这样的:
render json: { vacancy: vacancy, vacancy_count: Vacancy.count },
each_serializer: VacancyDetailSerializer,
include: [:restaurant]
资源:
以上是关于使用rails 5在json中渲染多个包含的主要内容,如果未能解决你的问题,请参考以下文章