Подозирам, че ActiveRecord не забелязва, че вашите friends
масивът се е променил, защото основният референтен масив не се променя, когато:
self.friends.push(target)
Това ще промени съдържанието на масива, но самият масив все още ще бъде същият масив. Знам, че този проблем се появява с скъпоценния камък postgres_ext в Rails3 и предвид този проблем:
Атрибутът низ не е маркиран като мръсен, когато се промени с
<<
Очаквам Rails4 да се държи по същия начин.
Решението би било да създадете нов масив, вместо да се опитвате да модифицирате масива на място:
update_attributes friends: self.friends + [ target ]
Има много начини да създадете нов масив, докато добавяте елемент към съществуващ масив, използвайте който искате.