シリアル化された配列があります
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 表現が String としてデータベースに保存され、Rails はそれを非シリアル化して文字列に戻します。それが機能していない理由です。
text
また、配列が長くなっても切り捨てられないように、列の型として使用したい場合があります。最近の Rails 構文では、次のようになります。
t.text :roles
また、新しいロールをデータベースに保存する場合は、後でオブジェクトを保存する必要があります (has_many
キーが他のテーブルにあるために自動的に保存される関連付けとは対照的です)。
e = Environment.find(1)
e.roles.push 'thing'
e.save
または、絶対にワンライナーにする必要がある場合:
Environment.find(1).tap{|e| e.roles.push 'things'}.save