Сделать RoR вложенным представимым в массив

Используя представимый драгоценный камень, я стремлюсь вложить объект в массив, причем этот массив имеет только один объект. Я не могу понять, как это сделать. Есть идеи? Причина этого кроется в том, как Менеджер тегов Google управляет улучшенным отслеживанием электронной торговли.

nested 'products' do
  property :name, getter: lambda{|*| name }
  property :id
end

Выплюнет

"products": {
  "name" : "Nike Swoosh",
  "id" : 8
}

Когда я хочу, чтобы выйти как:

"products": [ {
  "name" : "Nike Swoosh",
  "id" : 8
} ] 

1 ответ

Решение

Вы можете просто использовать коллекцию в представляемом модуле. Хотя у вас есть только один объект, так как вы хотите обернуть его в массив. Он технически стал коллекцией с одним предметом. Затем определите получатель с этим именем коллекции в родительском объекте. Вот пример:

require 'ostruct'
require 'representable'
require 'representable/json'

class Order < Struct.new(:order, :product)

   def products
     [product]
   end  
end

module OrderRepresenter
  include Representable::JSON

  property :name
  collection :products
end


sale = Order.new(name: "An order name", product: {name: "My Product", id: 1})
p sale.extend(SaleRepresenter).to_json
Другие вопросы по тегам