2016-11-26 4 views
0

Ich habe eine Tabelle namens featured_products, die nur zwei Spalten enthält (Produkt-ID, Position). Auf meinem GET/featured_products, ich möchte so etwas wie dieses Active Modell Serializer, Render-Zuordnung ohne Schlüssel

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

Aber stattdessen ich dies logisch erhalten

machen:

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

Nach dem doc von Active Modell Serializer, versucht I'v diese in meine featured_product Serializer Klasse:

embed_in_root: true 

und

belongs_to :product, embed_in_root: true 

aber der erste gibt einen Fehler, während der zweite JSON in keiner Weise ändert.

Ich weiß nicht, ob ich die Antwort, die ich im Dokument des Active Model Serializers gesucht habe, verpasst habe oder ob die Antwort woanders zu finden ist, aber ich habe es nicht alleine gelöst sei glücklich, hier ein paar Ratschläge zu bekommen.

Dank

Antwort

0

Sie können auch versuchen, diese:

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

Auch hier ist es für meinen speziellen Fall funktioniert. Aus Neugier, gibt es sowieso, um das Produkt in meinem JSON "zu umfassen", während es noch in FeaturedProductSerializer serialisieren, um andere Sachen (wie Position in meinem Fall) einzuschließen? – Sonastra

0

Ok ich eine Lösung gefunden haben, die Arbeit für meinen speziellen Fall tut.

Da ich für jedes featured_product nur das zugehörige Produkt anzeigen möchte, habe ich dies im Render-Aufruf gemappt.

also ging ich von diesen

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

zu diesen

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

diese Weise wird der Serializer von Produkt genannt wird und nicht derjenige von FeaturedProduct.

0

Versuchen

render json: @products, root: false 
Verwandte Themen