Arrays / Sets won't update properly
florian opened this issue · 3 comments
One of my models has a property that is a Set. (Same problem with arrays.)
property :some_set, Object
When I create an instance, the set is properly saved. But when I try to update the set (add a field to the set, and save the instance) the new set is not saved to the database.
instance = Model.first
instance.some_set #=> <Set: {"a", "b"}>
instance.some_set = instance.some_set.add('c')
instance.save()
instance.some_set #=> <Set: {"a", "b", "c"}>
Model.first.some_set #=> <Set: {"a", "b"}>
How to reproduce:
$ git clone https://github.com/js-coder/dm-sets.git
$ cd dm-sets
$ ruby set.rb
$ ruby array.rb
With objects mutated inplace dm1 is unable to detect dirtyness. A verbose answer can be found here: http://stackoverflow.com/questions/13917062/why-datamapper-does-not-update-records-detect-dirtiness. dm-types tries to workaround this with a dirty-minder, but this IMHO only does only fix the symptoms not the problem itself.
DataMapper 2.0 does not have this problem, by design.
So I'd include dm-types and use Flag
for arrays? There's no type for a Set right?
I wonder if a quick fix would be to add the ability to explicitly mark something as dirty? I think I could add this feature. It's not ideal, but I think it's doable.