DmitryTsepelev / store_model

Work with JSON-backed attributes as ActiveRecord-ish models
MIT License
1.04k stars 85 forks source link

NoMethodError serialize_unknown_attributes? on upgrading to 3.0.0 #174

Closed phinze closed 3 months ago

phinze commented 3 months ago

When upgrading to 3.0.0, I see a lot of test failures on a model with an enum:

NoMethodError: undefined method `serialize_unknown_attributes?' for nil:NilClass

I believe #173 will fix it, but I figured it was worth making a quick issue to track the problem too.

bf4 commented 3 months ago

Thanks @phinze for making this issue. Came here to see if there was anything after I couldn't see anything obvious in the changelog or diff.

For me, tests pass on https://github.com/DmitryTsepelev/store_model/commit/5aedf2798c34595230d31cf9451370c91cda79b5 and fail on https://github.com/DmitryTsepelev/store_model/commit/1a8eb4807a4d6394af6b7cf019aada04c13a9cf8

the current head ref for me is still broken

technically in my case it's in lib/store_model/types/many_base.rb

with the change

     def serialize(value)
        case value
        when Array
-          ActiveSupport::JSON.encode(value, serialize_unknown_attributes: true)
+          return ActiveSupport::JSON.encode(value) unless value.all? { |v| v.is_a?(StoreModel::Model) }
+
+          ActiveSupport::JSON.encode(value,
+                                     serialize_unknown_attributes: value.first.serialize_unknown_attributes?,
+                                     serialize_enums_using_as_json: value.first.serialize_enums_using_as_json?)

when value #=> [] is an empty array

bf4 commented 3 months ago

Happened to get my head in the space and found the fix https://github.com/DmitryTsepelev/store_model/pull/176 Not sure about the test. Having trouble getting all tests to pass, but my new test passes 🤷

DmitryTsepelev commented 3 months ago

Thank you all for help! The first PR is merged and I'm gonna to merge a second one right now. Please reach out if something is off 🙂