Нещото с полето Hash е, че то може да бъде динамично, колкото искате. Ето защо, за да предотвратите замърсяването на вашата DB схема с нежелани полета, причинени от грешки във вашия код, тази функционалност е деактивирана по подразбиране.
Не, изобщо не сте блокирани да използвате актуализации в две стъпки за вашите хешове!
[],[]=са преките пътища за read_attribute()
и write_attribute()
и трябва да се използва, ако не включите Mongoid::Attributes::Dynamic
. Ако се опитате да използвате $set
без да активирате динамични атрибути, ще получите грешка без метод, защото не вижда вашите динамични атрибути като дефинирани атрибути.
Ако прочетете източника на Mongoid::Атрибути::Динамичен тогава ще откриете, че това е необходимо за добавяне на функционалността на динамичните атрибути.
За да актуализирате стойностите, като включите Mongoid::Attributes::Dynamic
трябва да изпълните следните стъпки:
thing = Thing.first
thing.set("info.endDate" => Time.now)
thing.reload # This will update the current variable
В противен случай, ако имате нужда, можете лесно да пропуснете това и да направите актуализацията на стойността по метод в 2 стъпки
Надявам се, че това хвърля малко светлина върху вашето запитване.
Източник:
Динамични полета на Rails mongoid - няма грешка в метода
Динамични атрибути с Rails и Mongoid