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