Open akostadinov opened 2 years ago
Related to https://github.com/rails/rails/issues/44317
Basically if we always use #write_lobs
perhaps we don't need to have a #serialize
method and thus no fixing would be needed.
And if we believe that #write_lobs
is necessary is some use cases, then this or another workaround would be needed. Or Rails to stop updating the attribute value unnecessarily.
@yahonda , I updated implementation and description of this PR. But now all tests fail for some issue with database_version
that I don't think I have anything to do with that. Would you advise?
bump
ActiveRecord expects types to properly deserialize any values that have been serialized. Right now (Rails 7.1) by every object save the attributes are reset by serialize/deserialize cycle.
see ActiveModel::ActiveModel#forget_attribute_assignments
It might be inefficient but other parts of ActiveRecord and ActiveModel attributes also rely on serialize and deserialize being reversible. At least I saw that
#changed_in_place?
expects this to be true in some types like Serialized. So it is rather complicated to change Rails to prevent that.And also it makes intuitive sense that if our class has
#serialize
and#deserialize
methods, that they reverse each other.So to avoid confusing errors now and going forward, I believe we need this change.
This is more of a hack but I'm not sure of a better way to fix. Provided that we can use#write_lobs
for such inserts, then I don't know why we should serialize and insert with the insert statement thus need the#serialize
? Related to #2226I feel there should be a better fix but I'm confused with the whole idea around lob writing.