Tôi nghi ngờ rằng ActiveRecord không nhận thấy rằng friends
của bạn mảng đã thay đổi vì tham chiếu mảng bên dưới không thay đổi khi bạn:
self.friends.push(target)
Điều đó sẽ thay đổi nội dung của mảng nhưng bản thân mảng sẽ vẫn là mảng cũ. Tôi biết rằng vấn đề này xảy ra với viên ngọc postgres_ext trong Rails3 và do vấn đề này xảy ra:
Thuộc tính chuỗi không bị đánh dấu là bẩn khi nó thay đổi bằng
<<
Tôi mong đợi Rails4 sẽ hoạt động theo cách tương tự.
Giải pháp sẽ là tạo một mảng mới thay vì cố gắng sửa đổi mảng tại chỗ:
update_attributes friends: self.friends + [ target ]
Có rất nhiều cách để tạo một mảng mới trong khi thêm một phần tử vào một mảng hiện có, hãy sử dụng bất kỳ cách nào bạn thích.