Vấn đề với trường Hash là, nó có thể động bao nhiêu tùy thích. Do đó, để tránh làm ô nhiễm giản đồ DB của bạn với các trường không mong muốn do lỗi trong mã của bạn, chức năng này bị tắt theo mặc định.
Không, bạn hoàn toàn không gặp khó khăn khi sử dụng cập nhật 2 bước cho hàm băm của mình!
[], [] =là các phím tắt cho read_attribute()
và write_attribute()
và sẽ được sử dụng nếu bạn không bao gồm Mongoid::Attributes::Dynamic
. Nếu bạn cố gắng sử dụng $set
nếu không bật các thuộc tính động, bạn sẽ gặp lỗi không có phương pháp vì nó không xem các thuộc tính động của bạn là các thuộc tính đã xác định.
Nếu bạn sẽ đọc nguồn của Mongoid ::Các thuộc tính ::Động thì bạn sẽ thấy rằng điều này là cần thiết để thêm chức năng thuộc tính động.
Để cập nhật các giá trị bằng cách bao gồm Mongoid::Attributes::Dynamic
bạn cần làm theo các bước sau:
thing = Thing.first
thing.set("info.endDate" => Time.now)
thing.reload # This will update the current variable
Nếu không, nếu cần, bạn có thể dễ dàng bỏ qua bước này và thực hiện cập nhật giá trị bằng phương pháp 2 bước
Tôi hy vọng điều này làm sáng tỏ truy vấn của bạn.
Nguồn:
Rails mongoid các trường động - không có lỗi phương pháp
Thuộc tính động với Rails và Mongoid