2013-08-09 6 views
14

J'essaie de créer un fichier JSON pour accéder à la variation d'un produit via un code de variante. Idéalement, je pourrais appeler variations.abcdefgh essentiellement demander de définir une structure comme celle-ci:Clés dynamiques JBuilder pour les attributs de modèle

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

Faire quelque chose dans les produits/show.json.jbuilder comme

json.variations @product.variations 

me donne le formatage en tant que tel:

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

peut-être mon JavaScript pourrait être mieux, mais je veux quelque chose d'un peu plus accessible basé sur le product_code. Le plus proche que j'ai obtenu a été

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

mais je n'ai pas encore trouver une solution qui va mettre ces objets correctement formatés comme des enfants dans une variations d'attributs. Quelqu'un a couru quelque chose de similaire avant?

Répondre

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

^^ cela devrait le faire

+0

excellent. Très bonne solution! –

Questions connexes