Sagen med Hash-feltet er, at det kan være dynamisk så meget du vil. Derfor er denne funktionalitet deaktiveret som standard for at forhindre at dit DB-skema forurenes med utilsigtede felter forårsaget af fejl i din kode.
Nej, du sidder slet ikke fast ved at bruge 2-trins opdateringer til dine hashes!
[],[]=er genvejene til read_attribute()
og write_attribute()
og skal bruges, hvis du ikke inkluderer Mongoid::Attributes::Dynamic
. Hvis du prøver at bruge $set
uden at aktivere dynamiske attributter vil du få en fejlmeddelelse uden metode, fordi den ikke ser dine dynamiske attributter som definerede attributter.
Hvis du vil læse kilden til Mongoid::Attributter::Dynamisk så vil du opdage, at dette er nødvendigt for at tilføje funktionaliteten for dynamiske attributter.
Sådan opdaterer du værdierne ved at inkludere Mongoid::Attributes::Dynamic
du skal følge disse trin:
thing = Thing.first
thing.set("info.endDate" => Time.now)
thing.reload # This will update the current variable
Ellers, hvis du har brug for det, kan du nemt springe dette over og foretage værdiopdateringen ved 2-trins metode
Jeg håber, at dette kaster lys over din forespørgsel.
Kilde:
Rails-mongoide dynamiske felter - ingen metodefejl
Dynamiske attributter med Rails og Mongoid