Saya menduga bahwa ActiveRecord tidak memperhatikan bahwa friends
Anda array telah berubah karena, yah, referensi array yang mendasarinya tidak berubah ketika Anda:
self.friends.push(target)
Itu akan mengubah konten dari array tetapi array itu sendiri akan tetap menjadi array yang sama. Saya tahu bahwa masalah ini muncul dengan permata postgres_ext di Rails3 dan diberikan masalah ini:
Atribut string tidak ditandai sebagai kotor, ketika berubah dengan
<<
Saya berharap Rails4 berperilaku dengan cara yang sama.
Solusinya adalah dengan membuat larik baru daripada mencoba memodifikasi larik di tempat:
update_attributes friends: self.friends + [ target ]
Ada banyak cara untuk membuat larik baru sambil menambahkan elemen ke larik yang sudah ada, gunakan mana saja yang Anda suka.