0

我有一个序列化数组

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

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

我想做这样的事情

Enviroment.find(1).roles.push 'thing'
4

1 回答 1

2

提供这样的默认值会将其 YAML 表示形式作为字符串保存到数据库中,Rails 会将其反序列化回字符串。这就是为什么它不起作用。

此外,也许您想text用作列类型,这样您的数组就不会在它变长时被截断。在最近的 Rails 语法中,这将是:

t.text :roles

当您想将新角色存储到数据库中时,您必须在之后保存对象(与has_many自动保存 b/c 的关联相反,它的键在另一个表中):

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

或者,如果它绝对需要是 oneliner:

Environment.find(1).tap{|e| e.roles.push 'things'}.save
于 2012-04-17T18:10:43.453 回答