Jag misstänker att ActiveRecord inte märker att dina friends
arrayen har ändrats eftersom den underliggande arrayreferensen inte ändras när du:
self.friends.push(target)
Det kommer att ändra innehållet av arrayen men själva arrayen kommer fortfarande att vara samma array. Jag vet att detta problem dyker upp med postgres_ext pärla i Rails3 och med tanke på detta problem:
Strängattribut markeras inte som smutsigt när det ändras med
<<
Jag förväntar mig att Rails4 skulle bete sig på samma sätt.
Lösningen skulle vara att skapa en ny array istället för att försöka modifiera arrayen på plats:
update_attributes friends: self.friends + [ target ]
Det finns många sätt att skapa en ny array samtidigt som du lägger till ett element i en befintlig array, använd vilken du vill.