Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为序列化属性赋值会导致SerializationTypeMitch不匹配_Ruby On Rails_Serialization_Activerecord - Fatal编程技术网

Ruby on rails 为序列化属性赋值会导致SerializationTypeMitch不匹配

Ruby on rails 为序列化属性赋值会导致SerializationTypeMitch不匹配,ruby-on-rails,serialization,activerecord,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 ini

我感到惊讶的是,这还没有被问到,所以我希望我做了一些根本错误的事情,帮助很快就会到来。我有这个

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
create_表“foo”,:force=>true do|t|
t、 文本“条”,空=>false
...
结束
类Foo
现在我加上

class Foo < AR::Base
  before_validation :get_bar, :on => :create
  def get_bar
    self.bar = Bar.new({})
  end
end
类Foo:创建 def get_酒吧 self.bar=bar.new({}) 结束 结束
我无法创建任何Foo对象,因为对Bar的赋值会引发SerializationTypeMismatch。我已经对此进行了调试,发现bar的值在默认情况下是一个空字符串,AR对此进行验证并失败


问题是如何摆脱它。

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

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

是的,这是我能够找到的一种解决方案,另一种方法是将default设置为null,这样rails就什么都不做,一切都正常。