Jeg formoder, at ActiveRecord ikke bemærker, at dine friends
array er ændret, fordi den underliggende array-reference ikke ændres, når du:
self.friends.push(target)
Det vil ændre indholdet af arrayet, men selve arrayet vil stadig være det samme array. Jeg ved, at dette problem dukker op med postgres_ext perlen i Rails3 og givet dette problem:
String-attribut er ikke markeret som beskidt, når den ændres med <<
Jeg forventer, at Rails4 opfører sig på samme måde.
Løsningen ville være at oprette et nyt array i stedet for at prøve at ændre arrayet på stedet:
update_attributes friends: self.friends + [ target ]
Der er mange måder at oprette et nyt array på, mens du tilføjer et element til et eksisterende array, brug den du kan lide.