活动模型序列化器,无关键渲染关联

时间:2016-11-26 14:20:13

标签: ruby-on-rails ruby active-model-serializers

我有一个名为featured_products的表只包含两列(product_id,position)。 在我的GET / featured_products上,我想渲染类似这样的东西

[
   { "name":"Product 1" }
   { "name":"product 2" }
]

但相反,我逻辑上得到了这个:

[
   "product":{ "name":"Product 1" }
   "product":{ "name":"product 2" }
]

按照Active Model Serializers的文档,我在我的featured_product序列化程序类中尝试了这些:

embed_in_root: true

belongs_to :product, embed_in_root: true

但第一个打开时会出错,而第二个更改JSON绝不会。

我不知道我是否错过了我在Active Model Serializer的文档中找到的答案,或者如果答案可以在其他地方找到,但我没有设法我自己解决这个问题,我很高兴在这里得到一些建议。

由于

3 个答案:

答案 0 :(得分:0)

好的,我找到了一个适用于我特定情况的解决方案。

因为对于每个featured_product,我只想显示相关的产品,所以我最终在渲染调用中将其映射。

即,我从那里开始

render json: FeaturedProduct.all.order(:position)

到那个

render json: FeaturedProduct.all.order(:position).map(&:product)

这样,就会调用Product的序列化程序,而不是来自FeaturedProduct的序列化程序。

答案 1 :(得分:0)

你也可以试试这个:

render json: FeaturedProduct.includes(:product).order(:position).map(&:product) # include :product to avoid N + 1 queries on products

答案 2 :(得分:0)

尝试

render json: @products, root: false