【发布时间】:2011-07-05 06:40:32
【问题描述】:
我有一个活跃的记录模型:
class Person < ActiveRecord::Base
serialize :tags, Array
end
在迁移中,标签列被声明为
t.text :tags, :default => []
但是当我尝试创建一个人时
Person.new
我得到了错误
ActiveRecord::SerializationTypeMismatch: added was supposed to be a Array, but was a String
迁移中如何设置默认为空数组?
注意:我知道我可以使用 after_initialize 来做到这一点,但我更喜欢在迁移中设置默认值
【问题讨论】:
-
代替 after_initialize,试试 default_value_for 插件:github.com/FooBarWidget/default_value_for
-
请注意,您不能在 MySQL 中的 TEXT 列上设置默认值,可能还有其他列。
-
coreyward:有趣,我不知道。看起来这只是 Windows 上的问题bugs.mysql.com/bug.php?id=25520
-
paul:default_value_for 插件看起来很整洁,如果我找不到迁移的方法,那么我想我会走这条路
-
我在序列化为
Array的string列上遇到了同样的问题。一个空数组将产生一个空字符串""。问题是该列有null: false和serialize想要将[]序列化为nil。当它不能时,它使用"",但是它不能正确反序列化。
标签: ruby-on-rails ruby-on-rails-3 serialization activerecord attributes