2013-08-09 9 views
14

Sto provando a creare un file JSON per accedere alla variazione di un prodotto tramite un codice di variazione. Idealmente, avrei potuto chiamare variations.abcdefgh essenzialmente chiedendo di definire una struttura come questa:Tasti dinamici JBuilder per gli attributi del modello

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

Praticando in prodotti/show.json.jbuilder come

json.variations @product.variations 

mi dà la formattazione in quanto tale:

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

forse il mio JavaScript potrebbe essere migliore, ma voglio qualcosa un po 'più accessibile in base al codice prodotto. Il più vicino che ho ottenuto è stato

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

ma non ho ancora trovato una soluzione che mettere questi oggetti correttamente formattati come bambini in un attributo variazioni. Qualcuno si imbatte in qualcosa di simile prima?

risposta

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

^^ questo dovrebbe farlo

+0

eccellente. Ottima soluzione! –