Сериализация ActiveRecord :: Base потомки не работают в Rails 4 - PullRequest
0 голосов
/ 13 марта 2019

У меня есть строковое поле data в SerializeTest модели, и я хочу сохранить представление JSON другой модели ActiveRecord в нем. Не имеет значения, что я делаю, он хранит NULL в базе данных.

Тот же код работает, когда SerializeableObject является простым объектом, а не потомком ActiveRecord::Base.

class SerializeTest < ActiveRecord::Base
  serialize :data, SerializeableObject
end

class SerializeableObject < ActiveRecord::Base
  class << self
    def load(data)
      new JSON.load(data)
    end

    def dump(obj)
      obj.to_json
    end
  end
end

Вот как это воспроизвести

s = SerializeTest.new
s.data.foo = 'test'
s.save
s.reload
s.data.foo # should be 'test' but equals nil

Миграции

class CreateSerializeTests < ActiveRecord::Migration
  def change
    create_table :serialize_tests do |t|
      t.string :data
    end
  end
end

class CreateSerializeableObjects < ActiveRecord::Migration
  def change
    create_table :serializeable_objects do |t|
      t.string :foo
    end
  end
end

Есть идеи как это исправить?

P.S. В Rails 3 он работал нормально, но в Rails 4 не работает.

...