Привет,
Я озадачен этой проблемой несоответствия сериализации в Rails 3.0.5 и Ruby 1.9.2. Я заполняю базу данных подклассом Array, а затем пытаюсь сохранить объект ActiveRecord. Кто-нибудь может мне помочь, пожалуйста! Сначала я пытался сериализовать как Graph, но сократил его до Array, чтобы избежать ошибок с пользовательским классом. Я очень озадачен, поскольку это не имеет для меня интуитивного смысла. Большое спасибо за вашу помощь!
class Graph < Array
..
class Settings < ActiveRecord::Base
serialize :graphs, Array
..
Самые последние строки в seed.rb - например, ничего не происходит после. Просто сохранив много для отладки:
sh_1g = sh_1g.to_a
d.company.settings.add_graph(sh_1g.to_a)
d.company.settings.save!
d.company.save!
d.save!
if sh_1g == d.company.settings.graphs[0]
puts "the added graph matches the first graph in the graphs array"
end
puts "added " + sh_1g.inspect + " to " + d.company.settings.graphs.inspect
puts "class of added graph as saved is" + d.company.settings.graphs[0].class.inspect
puts "class of added graph is " + sh_1g.class.inspect
puts "class of graphs serial is " + d.company.settings.graphs.class.inspect
Вывод файла seed.rb при запуске:
the added graph matches the first graph in the graphs array
added [[[0, 0, ..]]] to to [[[[0, 0, ..]]]..]
class of added graph as saved isArray
class of added graph is Array
class of graphs serial is Array
Однако в консоли:
ruby-1.9.2-p180 :002 > Company.all[1].settings
ActiveRecord::SerializationTypeMismatch: graphs was supposed to be a Array, but was a String
from /Users/dlipa/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/attribute_methods/read.rb:106:in `unserialize_attribute'
from /Users/dlipa/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/attribute_methods/read.rb:82:in `read_attribute'
from /Users/dlipa/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/base.rb:1586:in `attribute_for_inspect'
from /Users/dlipa/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/base.rb:1667:in `block in inspect'
from /Users/dlipa/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/base.rb:1665:in `collect'
from /Users/dlipa/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/base.rb:1665:in `inspect'
from /Users/dlipa/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/associations/association_proxy.rb:146:in `inspect'
from /Users/dlipa/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.5/lib/rails/commands/console.rb:44:in `start'
from /Users/dlipa/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.5/lib/rails/commands/console.rb:8:in `start'
from /Users/dlipa/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.5/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'