ハッシュフィールドの特徴は、必要なだけ動的にすることができるということです。したがって、コードのバグが原因でDBスキーマが意図しないフィールドで汚染されるのを防ぐために、この機能はデフォルトで無効になっています。
いいえ、ハッシュに2段階の更新を使用することに固執していません!
[]、[]=は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段階の方法で値を更新できます
これがあなたの質問に光を当てることを願っています。
出典:
RailsMongoid動的フィールド-メソッドエラーなし>