Rzecz z polem mieszającym polega na tym, że może być tak dynamiczna, jak tylko chcesz. Dlatego, aby zapobiec zanieczyszczeniu schematu bazy danych niezamierzonymi polami spowodowanymi błędami w kodzie, ta funkcja jest domyślnie wyłączona.
Nie, w ogóle nie utknąłeś przy korzystaniu z dwuetapowych aktualizacji hashów!
[],[]=to skróty do read_attribute()
i write_attribute()
i powinny być używane, jeśli nie zawierasz Mongoid::Attributes::Dynamic
. Jeśli spróbujesz użyć $set
bez włączenia atrybutów dynamicznych pojawi się błąd braku metody, ponieważ nie widzi on atrybutów dynamicznych jako zdefiniowanych atrybutów.
Jeśli przeczytasz źródło Mongoid::Atrybuty::Dynamiczny wtedy okaże się, że jest to wymagane, aby dodać funkcję dynamicznych atrybutów.
Aby zaktualizować wartości, dołączając Mongoid::Attributes::Dynamic
musisz wykonać następujące kroki:
thing = Thing.first
thing.set("info.endDate" => Time.now)
thing.reload # This will update the current variable
W przeciwnym razie, jeśli potrzebujesz, możesz to łatwo pominąć i dokonać aktualizacji wartości metodą dwuetapową
Mam nadzieję, że to rzuci trochę światła na Twoje zapytanie.
Źródło:
Dynamiczne pola Rails mongoid – brak błędu metody
Atrybuty dynamiczne w Rails i Mongoid