Ich habe ein postgres DB, meine Rails app mit einer Klasse mit einer jsonb SpalteVerwenden Storext (oder nur Virtus) mit verschachtelten Array oder Hash-Objekte
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
Aber Foo im Terminal Trägervlies zurückkehr undefined method after_initialize for Foo:Class
Gibt es eine Möglichkeit Storext
Modelle so zu verschachteln, wie es ist mit Virtus
? Und wenn ja, gibt es eine idiomatische Möglichkeit, den verschachtelten Klassen Validierungen hinzuzufügen? (Verzicht auf Storext, und eine reine Virtus Lösung würde auch die Frage beantworten)
Vielleicht ist dies ein A/B-Problem, weil ich Virtus nur in FooCollection enthalten und es verschwand ebenfalls aus dem data
Hash (was ich seltsam betrachten, da Storext
ist basierend auf Virtus
und kann Virtus
Methoden akzeptieren).
Für das, was es wert ist Virtus war auch zu starr (oder möglicherweise wusste ich nicht, wie Virtus gut genug zu verwenden) für das, was ich versuchte zu tun. Also habe ich einfach etwas Brauchbares geschrieben. Es ist gut zu sehen, dass das nicht so ist, wie es funktionieren soll, denn das ist immer die Angst, verstehe ich X nicht oder macht X das Ding einfach nicht? – MCB
Ja, auch, es kompliziert den Code :) Cool froh zu hören, dass Sie eine Lösung gefunden haben. –