我有这段代码可以通过自定义序列化器呈现可变的空缺,并且还包含了一家餐厅,作为我的模型的一部分。
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
,但是我不知道我是否必须由序列化程序,包含项或操作方法来完成它。
据我所知,我只需要在对象后面加上一个逗号,然后在包含的对象中指定另一个对象,但不起作用。
更新
P.D。 total_vacancies不是表格,是我的空缺模型中的方法
P.D.2。的确,如果我在序列化程序中将total_vacancies
作为属性可以工作,但是如果我每次渲染此json都可以,那么每次调用空缺时,它都会重复total_vacancies
我有100个空缺,那么我的json会将我的空缺和total_vacancies
的所有参数写成100次,而不是作为一个不同的对象
答案 0 :(得分:1)
我认为TotalVacancies是另一个表。
您每个人都需要有一个单独的序列化程序,VacancyDetailSerializer
的修改必须如下所示
如果TotalVacancies不是单独的表。如果TotalVacancies不是单独的表,请使用我在下面评论的has_many
并使用其对应的序列化器: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
您不需要在渲染中包含这样的内容。由于我们在VacanciesSerializer中添加了以下代码,因此代码本身应包含TotalVacancies和Restaurant
您还可以控制Restaurant和TotalVacancies中的属性列表
vacancy = Vacancy.find(params[:id])
render json: vacancy,
serializer: VacancyDetailSerializer
答案 1 :(得分:0)
Ian Lewis在Facebook上给出的解决方案:
只需简单地放置
render json: { vacancy: vacancy, vacancy_count: Vacancy.count }
然后一切正常,最终代码如下:
render json: { vacancy: vacancy, vacancy_count: Vacancy.count },
each_serializer: VacancyDetailSerializer,
include: [:restaurant]
来源: