2016-11-26 105 views
0

我有一个名为featured_products的表只包含两列(product_id,position)。 在我的GET/featured_products,我想呈现像这样主动模型串行器,呈现无关键的关联

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

而是我在逻辑上得到这样的:

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

以下活性型号序列化的文档,我心中已经尝试了这些在我featured_product序列化器类:

embed_in_root: true 

belongs_to :product, embed_in_root: true 

但第一个给出错误,而第二个更改JSON决不会。

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

谢谢

回答

0

你也可以试试这个:

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

在这里,它适合我的具体情况。出于好奇,是否还有将产品“包含”在我的JSON中,同时仍然在FeaturedProductSerializer中序列化它以包含其他东西(比如我的例子中的Position)? – Sonastra

0

好的我发现了一个解决方案,它适用于我的具体情况。

因为对于每个featured_product,我只想显示关联的产品,我最终将其映射到render调用中。

即,我从

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

去的那

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

这样,产品的串行叫,而不是一个从FeaturedProduct。

0

尝试

render json: @products, root: false