2010-11-09 18 views
5

Chúng tôi đã gặp phải sự cố thú vị vào hôm nay. Dường như nếu bạn sử dụng toán tử xẻng để nối một thuộc tính chuỗi trên mô hình ActiveRecord, nó không làm cho mô hình bị bẩn. Ví dụ:Ruby on Rails: Sử dụng toán tử xẻng để cập nhật thuộc tính chuỗi trên mô hình không làm cho mô hình bị bẩn

e = Employee.first 
e.name << "asdf" 
e.name_changed? # returns false 
e.changed? # returns false 

Điều này có ý nghĩa vì toán tử xẻng cập nhật chuỗi mà không tạo bản sao, trong đó toán tử + = sẽ sao chép chuỗi. Tôi không thấy làm thế nào ActiveRecord có thể có thể biết rằng một cái gì đó thay đổi nếu bạn sử dụng các nhà điều hành xẻng.

Có ai khác nhìn thấy điều này không? Là giải pháp để chỉ sử dụng += thay vì << khi ghép chuỗi?

+0

Bạn nên gửi báo cáo lỗi cho các thành viên của đường ray nếu bạn chưa có. – rwilliams

+0

không có lỗi nào, nó đã biết và nó yên lặng không thể tránh được – shingara

Trả lời

5

Giải pháp là bạn viết.

Hoặc bạn có thể đánh dấu trước đó will_change attibute bạn

e = Employee.first 
e.name_will_change! 
e.name << "asdf" 
e.name_changed? # => true 

Đó là dấu ấn tài liệu API. ActiveModel :: Dirty

+2

Chúa ơi, tôi chỉ yêu mã Ruby đôi khi trông giống như một cuộc trò chuyện thực sự nhưng đáng sợ giữa chúng ta và máy tính! Và chúng tôi là ông chủ cung cấp cho các đơn đặt hàng, không phải là nô lệ điền vào hàng chục báo cáo (XML?) Mà ông chủ sẽ không bao giờ đọc anyway. –

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