使RoR嵌套可表示为数组

时间:2015-07-23 15:36:01

标签: ruby-on-rails ruby json representable

在使用representable gem时,我希望在数组中嵌套一个对象,该数组只有一个对象。我无法弄清楚如何实现这一目标。有任何想法吗?造成这种情况的原因是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 个答案:

答案 0 :(得分:1)

您可以在可表示的模块中使用该集合。虽然您只有一个对象,但是因为要将其包装在Array中。它在技术上成为具有单个对象的集合。然后在父对象中定义具有该集合名称的getter。这是一个例子:

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