我有一个序列化数组
class Enviroment < ActiveRecord::Base
serialize :roles, Array
...
t.column :roles, :string, :default=> Array.new
我想做像
这样的事情Enviroment.find(1).roles.push 'thing'
答案 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