Giả sử tôi có đối tượng FireNinja < Ninja
trong cơ sở dữ liệu của mình, được lưu trữ bằng cách sử dụng thừa kế bảng đơn. Sau đó, tôi nhận ra anh ta thực sự là một WaterNinja < Ninja
. Cách sạch nhất để thay đổi anh ta thành lớp con khác là gì? Thậm chí tốt hơn, tôi rất muốn tạo một đối tượng WaterNinja
mới và chỉ thay thế số FireNinja
cũ trong DB, giữ lại ID.Thay đổi lớp của đối tượng trong ActiveRecord
Sửa tôi biết làm thế nào để tạo ra các đối tượng mới WaterNinja
từ hiện FireNinja
, và tôi cũng biết tôi có thể xóa cái cũ và lưu mới của tôi. Điều tôi muốn làm là biến đổi lớp của mục hiện có. Cho dù tôi làm điều đó bằng cách tạo ra một đối tượng mới và thực hiện một số phép thuật ActiveRecord để thay thế hàng, hoặc bằng cách làm một điều điên rồ nào đó cho chính đối tượng đó, hoặc thậm chí bằng cách xóa nó và gắn lại với cùng một ID là một phần của câu hỏi.
Có vẻ như bạn đang trả lời, "làm cách nào để chuyển đổi tất cả' FireNinjas' thành 'WaterNinjas'?" Câu trả lời vẫn hoạt động mặc dù nếu tôi thay đổi điều kiện thành 'ID = myid'. Vâng, tôi đã nghĩ về điều đó.Tôi cũng phải kéo đối tượng ra sau khi cập nhật để làm một số thiết lập trường cụ thể WaterNinja, nhưng đó là tốt. Tôi đã hy vọng cho một cái gì đó một chút sạch hơn, mặc dù. –
Tôi hiểu ý của bạn là gì. Tôi không khuyên bạn nên làm điều này, nhưng điều này sẽ làm các trick: 'ninja_id = @ ninja.id; @ ninja.update_attribute (: type, 'WaterNinja'); @ninja = WaterNinja.find (ninja_id) ' –
Đã chỉnh sửa để hiển thị phương pháp tôi mô tả. –