在ActiveRecord Ruby中使用带有序列化数组的数组函数

时间:2012-04-17 16:44:23

标签: ruby activerecord

我有一个序列化数组

class Enviroment < ActiveRecord::Base
serialize :roles, Array

...
t.column :roles, :string, :default=> Array.new

我想做像

这样的事情
Enviroment.find(1).roles.push 'thing'

1 个答案:

答案 0 :(得分:2)

提供这样的默认值会将它的YAML表示形式保存为数据库,并将Rails反序列化为字符串。这就是它无法正常工作的原因。

此外,您可能希望使用text作为列类型,以便在数组变长时不会截断数组。在最近的Rails语法中,那将是:

t.text :roles

当你想将新角色存储到数据库中时,你必须在之后保存对象(与自动保存的has_many关联相反b / c它的关键是 other < / em> table):

e = Environment.find(1)
e.roles.push 'thing'
e.save

或者如果绝对需要oneliner:

Environment.find(1).tap{|e| e.roles.push 'things'}.save