Динамические клавиши JBuilder для атрибутов модели

Я пытаюсь создать JSON файл для доступа к вариации продукта с помощью вариационного кода. В идеале я мог бы назвать vari.abcdefgh, по существу, просить определить такую ​​структуру:

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

Выполнение чего-то в продуктах /show.json.jbuilder как

json.variations @product.variations

дает мне форматирование как таковое:

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

Возможно, мой JavaScript может быть лучше, но я хочу что-то более доступное на основе product_code. Самое близкое, что я получил, было

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

но я еще не нашел решение, которое поместит эти правильно отформатированные объекты в виде детей в атрибут разновидностей. Кто-нибудь сталкивался с чем-то подобным раньше?

Ответы

Ответ 1

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

^^ это должно сделать это