ActiveRecordがあなたのfriends
に気づいていないのではないかと思います 配列が変更されたのは、次の場合に基になる配列参照が変更されないためです。
self.friends.push(target)
これにより、コンテンツが変更されます アレイのですが、アレイ自体は同じアレイのままです。この問題はRails3のpostgres_extgemで発生し、この問題が発生することを知っています:
文字列属性は、
<<
で変更された場合、ダーティとしてマークされません
Rails4も同じように動作することを期待しています。
解決策は、アレイをインプレースで変更しようとするのではなく、新しいアレイを作成することです。
update_attributes friends: self.friends + [ target ]
既存の配列に要素を追加しながら新しい配列を作成する方法はたくさんあります。好きなものを使用してください。