PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Neue Daten bleiben nicht in der Rails-Array-Spalte auf Postgres bestehen

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.