2011-12-06 19 views
9

Tôi có một mô hình ActiveRecord có trường chuỗi dài. Trên thực tế, chuỗi này đại diện cho một mảng mà tôi muốn sửa đổi tại chỗ thay vì sao chép toàn bộ chuỗi.Tôi có thể buộc ActiveRecord lưu mô hình khi trường chuỗi được sửa đổi tại chỗ không?

Ví dụ: giả sử Somemodel có trường chuỗi array. Sau đó, sau thất bại trong việc tiết kiệm:

m = Somemodel.first 
m.array[someindex] = somevalue 
m.save 

Trên thực tế, save trả về true bởi có vẻ như để kiểm tra xem array có cùng object_id và quyết định rằng mô hình vẫn không thay đổi và bỏ qua khứ hồi cơ sở dữ liệu.

tôi đã kết thúc bằng cách sử dụng workaround sau:

m = Somemodel.first 
a = String.new(m.array) # remember, the array is represented as a string 
a[someindex] = somevalue 
m.array = a 
m.save 

Lưu ý rằng m.array phải được thiết lập sau khi thay đổi giá trị của nó vì save nhìn vào giá trị và không chỉ object_id.

Điều này cảm thấy cồng kềnh và yêu cầu toàn bộ chuỗi được sao chép. Không tốt cho mảng lớn. Tôi có thể yêu cầu save bỏ qua các kiểm tra được sửa đổi theo mô hình này mà không cần kiểm tra xác nhận trước không?

Trả lời

Các vấn đề liên quan