Объект изменил дескриптор с помощью пользовательского сериализатора - PullRequest
0 голосов
/ 17 мая 2019

Я определил пользовательский сериализатор

class CustomSerializer
  def self.dump(obj)
    obj.to_h
  end

  def self.load(obj)
    CustomClass.new(obj)
  end
end

и используется в активной модели записи

class Klass < ActiveRecord::Base
   serialize :my_column, CustomSerializer
end 

Теперь при использовании объекта Klass k = Klass.first я всегда вижу k.changed? = true

Я понимаю, что это из-за ссылки на класс, введенной сериализатором, который я определил

k.my_column_was # #<CustomClass:0x00007fd9063d6288>
k.my_column # #<CustomClass:0x00007fd9080d9088> 

Как я могу исправить это поведение?

1 Ответ

1 голос
/ 17 мая 2019

Rails 5 Атрибут API позволит вам управлять обработкой грязного отслеживания .

Это рекомендуемый метод для доменной сериализации.

В более сложных случаях, таких как преобразование в или из объектов домена вашего приложения, рассмотрите возможность использования API ActiveRecord :: Attributes.

Для рельсов <5, к сожалению, в документах указано: </p>

Заметным побочным эффектом сериализованных атрибутов является то, что модель будет обновляться при каждом сохранении, даже если она не будет загрязнена.

Что вы наткнулись на

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...