为序列化属性赋值会导致SerializationTypeMismatch

时间:2010-09-14 19:21:05

标签: ruby-on-rails serialization activerecord

我发现令人惊讶的是,这还没有被问到,所以我希望我做的事情从根本上是错误的,帮助很快就会到来。我有这个

create_table "foo", :force => true do |t|
  t.text     "bar",                                     :null => false
  ...
end

class Foo < AR::Base
   serialize :bar, Bar
end

class Bar
   def initialize(hsh)
     @data = hsh # and some more code...
   end
end

现在我添加

class Foo < AR::Base
  before_validation :get_bar, :on => :create
  def get_bar
    self.bar = Bar.new({})
  end
end

我无法创建任何Foo对象,因为Bar的赋值会引发SerializationTypeMismatch。我调试了这个,发现bar的值默认为空字符串,AR验证并失败。

问题是如何摆脱它。

1 个答案:

答案 0 :(得分:2)

创建迁移时,您需要设置默认值。

create_table "foo", :force => true do |t|
  t.text     "bar", :null => false, :default => Bar.new({}).to_yaml
  ...
end