使用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]

资源:

https://www.facebook.com/groups/railsrocks/permalink/10151113078349957/?comment_id=10151113264214957&reply_comment_id=10151113313639957&notif_id=1535830677954887&notif_t=group_comment

以上是关于使用rails 5在json中渲染多个包含的主要内容,如果未能解决你的问题,请参考以下文章

Rails - 如何在索引控制器方法中使用额外字段渲染json

响应多个 JSON 渲染。 (红宝石/导轨)

如何最好地使用批量数据json在rails中渲染?

在 JSON JBuilder 中渲染 html 部分

在没有模型对象 Rails 4 中覆盖渲染:json

在 Ruby on Rails 中,如何渲染 JSON?