将Storext(或只是Virtus)与嵌套数组或散列对象一起使用

时间:2016-04-28 23:05:52

标签: ruby-on-rails hstore jsonb virtus

我有一个postgres数据库支持我的Rails应用程序与一个带有jsonb列的类

class Product < AR::B
  include Storext.model(data: {})

  store_attributes :data do
    thing_one String
    thing_two Boolean # Not actually showing up in the `data` hash
    foos      FooCollection[Foo]
  end
end

class FooCollection < Array
  def <<(obj)
    if Hash
      super(Coupon.new(obj)
    else
      # Other coersions
    end
  end
end

class Foo
  include Storext.model

  attribute :id,                Integer
  attribute :price,             Float
  attribute :regular_price,     Float
end

但终端中的Foo正在返回undefined method after_initialize for Foo:Class

是否可以像Storext一样嵌套Virtus模型?如果是这样,是否有一种惯用的方法来在嵌套类上添加验证? (放弃Storext,纯粹的Virtus解决方案也会回答这个问题)

也许这是一个A / B问题,因为我刚刚将Firtus包含在FooCollection中,它也从data哈希消失了(我认为Storext基于Virtus并且{可以接受Virtus方法。

1 个答案:

答案 0 :(得分:0)

创建Storext仅用于输入简单值。我自己并没有在Virtus中存储复杂的物体,我还是不确定它是否应该成为Storext的一部分。虽然它在后台使用Virtus,但我认为它不应该实现Virtus可以做的所有事情。

派对有点晚了,但我希望这会有所帮助。