我发现令人惊讶的是,这还没有被问到,所以我希望我做的事情从根本上是错误的,帮助很快就会到来。我有这个
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验证并失败。
问题是如何摆脱它。
答案 0 :(得分:2)
创建迁移时,您需要设置默认值。
create_table "foo", :force => true do |t|
t.text "bar", :null => false, :default => Bar.new({}).to_yaml
...
end