Ik vermoed dat ActiveRecord niet merkt dat je friends
array is veranderd omdat, nou ja, de onderliggende arrayverwijzing verandert niet wanneer je:
self.friends.push(target)
Dat verandert de inhoud van de array, maar de array zelf zal nog steeds dezelfde array zijn. Ik weet dat dit probleem zich voordoet met de postgres_ext-edelsteen in Rails3 en gezien dit probleem:
Tekenreekskenmerk is niet gemarkeerd als vies, wanneer het verandert met
<<
Ik zou verwachten dat Rails4 zich op dezelfde manier zou gedragen.
De oplossing zou zijn om een nieuwe array aan te maken in plaats van te proberen de array ter plekke aan te passen:
update_attributes friends: self.friends + [ target ]
Er zijn veel manieren om een nieuwe array te maken terwijl je een element aan een bestaande array toevoegt, gebruik de gewenste.