ops*_*psb 11 serialization activerecord attributes ruby-on-rails ruby-on-rails-3
我有一个活跃的记录模型:
class Person < ActiveRecord::Base
serialize :tags, Array
end
Run Code Online (Sandbox Code Playgroud)
在迁移中,tags列声明为
t.text :tags, :default => []
Run Code Online (Sandbox Code Playgroud)
但是当我试图创造一个人的时候
Person.new
Run Code Online (Sandbox Code Playgroud)
我收到了错误
ActiveRecord::SerializationTypeMismatch: added was supposed to be a Array, but was a String
Run Code Online (Sandbox Code Playgroud)
如何在迁移中将默认设置为空数组?
注意:我知道我可以使用after_initialize来做到这一点,但我更喜欢在迁移中设置默认值
可以选择指定要将对象存储为的类.试试这个:
class Person < ActiveRecord::Base
serialize :tags, Array
end
Run Code Online (Sandbox Code Playgroud)
听起来好像您遇到了框架错误或其他东西正在干扰您的迁移;我刚刚尝试使用 Rails 2.3.10 构建上述内容,并且可以毫无问题地实例化对象。但是,我注意到 YAML 用于序列化,因此:
t.text :tags, :default => [].to_yaml
Run Code Online (Sandbox Code Playgroud)
...可能会成功。在我的测试应用程序中,这两种迁移似乎表现相同。