diff --git a/lib/concern/has_custom_fields.rb b/lib/concern/has_custom_fields.rb index 18273af10e0..aadd3b91f24 100644 --- a/lib/concern/has_custom_fields.rb +++ b/lib/concern/has_custom_fields.rb @@ -14,6 +14,10 @@ module Concern end end + def custom_fields=(data) + custom_fields.replace(data) + end + protected def save_custom_fields @@ -24,7 +28,7 @@ module Concern if dup[f.name] != f.value f.destroy else - dup.remove[f.name] + dup.delete(f.name) end end @@ -32,7 +36,7 @@ module Concern _custom_fields.create(name: k, value: v) end - @custom_fields_orig = @custom_fields + @custom_fields_orig = dup end end end diff --git a/spec/components/concern/has_custom_fields_spec.rb b/spec/components/concern/has_custom_fields_spec.rb index 176e1c0cc96..c5c5f7a6018 100644 --- a/spec/components/concern/has_custom_fields_spec.rb +++ b/spec/components/concern/has_custom_fields_spec.rb @@ -51,6 +51,20 @@ describe Concern::HasCustomFields do test_item.custom_fields.should == {"jack" => "jill"} end + it "double save actually saves" do + + test_item = TestItem.new + test_item.custom_fields = {"a" => "b"} + test_item.save + + test_item.custom_fields["c"] = "d" + test_item.save + + db_item = TestItem.find(test_item.id) + db_item.custom_fields.should == {"a" => "b", "c" => "d"} + + end + it "simple modifications don't interfere" do test_item = TestItem.new