空数组作为active_record序列化属性的默认值

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来做到这一点,但我更喜欢在迁移中设置默认值

Pet*_*own 8

可以选择指定要将对象存储为的类.试试这个:

class Person < ActiveRecord::Base
  serialize :tags, Array
end
Run Code Online (Sandbox Code Playgroud)

  • 啊,好抓,应该是原来的帖子.我已经有了这个指定,没有骰子. (2认同)

And*_*son 4

听起来好像您遇到了框架错误或其他东西正在干扰您的迁移;我刚刚尝试使用 Rails 2.3.10 构建上述内容,并且可以毫无问题地实例化对象。但是,我注意到 YAML 用于序列化,因此:

t.text :tags, :default => [].to_yaml
Run Code Online (Sandbox Code Playgroud)

...可能会成功。在我的测试应用程序中,这两种迁移似乎表现相同。