2013-08-09 17 views
14

Próbuję utworzyć plik JSON, aby uzyskać dostęp do wersji produktu za pomocą kodu zmiany. Idealnie, mogę zadzwonić variations.abcdefgh istocie zdefiniować strukturę takiego:Klucze dynamiczne JBuildera dla atrybutów modelu

{ 
    "variations":{ 
     "abcdefgh":{ 
     "available":true, 
     "price":"12.00" 
     }, 
     "ijklmnop":{ 
     "available":false, 
     "price":"25.00" 
     } 
    } 
} 

Uprawiając produktami/show.json.jbuilder jak

json.variations @product.variations 

daje mi formatowania takie jak:

{ 
    "variations":[ 
     { 
     "available":true, 
     "price":"12.00", 
     "product_code":"abcdefgh" 
     }, 
     { 
     "available":true, 
     "price":"25.00", 
     "product_code":"ijklmnop" 
     } 
    ] 
} 

Może mój JavaScript może być lepszy, ale chcę czegoś bardziej dostępnego w oparciu o kod produktu. Najbliższy stałam został

@product.variations.each do |variation| 
    json.set! variation.product_code, variation 
end 

ale mam jeszcze do znalezienia rozwiązania, które będzie można umieścić te prawidłowo sformatowanych obiektów jak dzieci w atrybut odmiany. Ktoś już kiedyś ma coś podobnego?

Odpowiedz

30
json.set! :variations do 
    @variations.each do |variation| 
    json.set! variation.product_code do 
     json.(variation, :available, :price) 
    end 
    end 
end 

^^ to powinien zrobić to

+0

Doskonałe. Bardzo dobre rozwiązanie! –

Powiązane problemy