Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JBuilder dynamic keys for model attributes

I'm trying to build a JSON file to access a product's variation via a variation code. Ideally, I could call variations.abcdefgh essentially asking to define a structure like this:

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

Doing something in products/show.json.jbuilder like

json.variations @product.variations

gives me formatting as such:

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

maybe my JavaScript could be better, but I want something a little more accessible based on the product_code. The closest I've gotten has been

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

but I've yet to find a solution that will put these correctly formatted objects as children into a variations attribute. Anyone run into something similar before?

like image 739
zack Avatar asked Aug 09 '13 19:08

zack


1 Answers

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

^^ this should do it

like image 115
cristi_razvi Avatar answered Nov 08 '22 05:11

cristi_razvi