2016-04-28 1 views
2

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).

Antwort

0

Storext wurde erstellt, um nur einfache Werte zu schreiben. Ich habe nicht selbst in Virtus herumgespielt, um komplexe Objekte zu speichern, und ich bin immer noch unentschlossen, ob das Teil von Storext sein sollte oder nicht. Während es Virtus im Hintergrund verwendet, sollte es meiner Meinung nach nicht alles implementieren, was Virtus kann.

Ein wenig zu spät zur Party, aber ich hoffe, das hilft.

+1

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

+1

Ja, auch, es kompliziert den Code :) Cool froh zu hören, dass Sie eine Lösung gefunden haben. –

Verwandte Themen