1

Railsコンソールでデータの更新を実行しようとしていますが、何らかの理由で、1つの属性を更新すると、Mongoidが他の属性をnullに設定します。

1.9.3p194 :044 > User.first().cart.cartitems
 => [#<Cartitem _id: 5047eef3c8bafa761100001a, _type: nil, quantity: 1000, scentid: 1>]
1.9.3p194 :047 > User.first().cart.cartitems.where(scentid:1).update(quantity:100)
=> nil
1.9.3p194 :048 > User.first().cart.cartitems
=> [#<Cartitem _id: 5047ef65c8bafa761100001c, _type: nil, quantity: 100, scentid: nil>]

scentidがnilに設定されていることに注目してください。.set(:quantity、100)も使用してみましたが、カートアイテムを再度クエリしても、これは持続しません。

これは正常な動作ですか?

ありがとう!

4

1 に答える 1

4

Mongoid永続化メソッドの代わりに純粋なMongoDBrubyドライバーの.update()メソッドを実行している可能性はありますか?もしそうなら、観察された振る舞いが期待されます。update()は、次のようにドキュメント全体を書き換えます: http: //api.mongodb.org/ruby/current/file.tokyo.html#Updating_Documents_with_update

$set演算子は次のように使用できます。

.update({"scentid" => 1}, {"$set" => {"quantity" => 100}})

または、代わりにMongoidを試すか、http: //mongoid.org/en/mongoid/docs/persistence.html#atomicupdate_attributes()から他の適切な永続化方法を試してください。

于 2012-09-06T02:08:27.380 に答える