Ich vermute, dass ActiveRecord nicht bemerkt, dass Ihre friends
Das Array hat sich geändert, weil sich die zugrunde liegende Array-Referenz nicht ändert, wenn Sie:
self.friends.push(target)
Das ändert den Inhalt des Arrays, aber das Array selbst bleibt dasselbe Array. Ich weiß, dass dieses Problem mit dem Postgres_ext-Gem in Rails3 auftritt und angesichts dieses Problems:
Das String-Attribut wird nicht als unsauber markiert, wenn es sich mit <<
ändert
Ich würde erwarten, dass sich Rails4 genauso verhält.
Die Lösung wäre, ein neues Array zu erstellen, anstatt zu versuchen, das Array an Ort und Stelle zu ändern:
update_attributes friends: self.friends + [ target ]
Es gibt viele Möglichkeiten, ein neues Array zu erstellen, während Sie ein Element zu einem bestehenden Array hinzufügen, verwenden Sie das, was Ihnen gefällt.