У меня есть строковое поле 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 не работает.