2

我有一个 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 问题,因为我刚刚在 FooCollection 中包含了 Virtus,它也从data哈希中消失了(我认为这很奇怪,因为Storext它基于Virtus并且可以接受Virtus方法)。

4

1 回答 1

0

Storext 仅用于对简单值进行类型转换。我自己并没有在 Virtus 中存储复杂的对象,我仍然不确定这是否应该成为 Storext 的一部分。虽然它在后台使用 Virtus,但我认为它不应该实现 Virtus 可以做的所有事情。

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

于 2017-02-13T01:42:07.547 回答