私は次のクラスを持っています:
class Magazine
include Mongoid::Document
field :name
field :count
field :_id, default: -> { name }
を通じて、このタイプの新しいドキュメントを作成しますMagazine.create!(name: "Yolo", count: 2)
。これはうまくいきます。今、MongoDB でこのドキュメントを更新したい場合、カウントが変更されたので、これでうまくいくと思いました:
Magazine.create!(name: "Yolo", count: 42)
名前は同じ識別子にマップされるため、ドキュメントはオーバーライドされます。操作は成功したように見えますが、MongoDB ではドキュメントが更新されませんでした。
代わりに、私はしなければなりません:
Magazine.where(name: "Yolo").first.update_attributes!(count: 42)
どちらが機能しますが、最初のアプローチが機能しない理由と、2 番目のアプローチが Mongoid を介してドキュメントを更新する一般的な方法である場合、誰かが説明できますか?