我有一个名为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的文档中找到的答案,或者如果答案可以在其他地方找到,但我没有设法我自己解决这个问题,我很高兴在这里得到一些建议。
由于
答案 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