1

Ruby / Sinatra アプリに埋め込まれたドキュメントを更新できません。埋め込み配列から正しいドキュメントを選択するために、update ステートメントで位置演算子 "$" を使用しようとしています。しかし、これは「ArgumentError - 引数の数が間違っています (1 に対して 2)」というエラーをスローしています。

ハードコーディングされた配列インデックスを使用した単純な更新ステートメントは正常に機能します。もしかして、Mongoid/Moped は位置演算子をサポートしていないのでしょうか?...

最善のアプローチが何であるかを知っている人はいますか?コントローラーでRubyを使用してすべてを反復処理せずにサブドキュメントインデックスを決定する他の方法はありますか-これはプランBですが、本当に不安定に思えます!...

ここに私の基本的なセットアップがあります: 私は「顧客」を持っています...

class Customer
    include Mongoid::Document
    field :customer_name, type: String

    embeds_many :contacts

    attr_accessible :customer_name
end

...「連絡先」が埋め込まれています...

class Contact
    include Mongoid::Document
    field :first_name, type: String

    attr_accessible :first_name

    embedded_in :customer
end

そして、コントローラーで、顧客 (pk) の ._ids と、更新する特定の埋め込みドキュメント (contact_pk) の両方を取得します。

Customer.update(
                 { 
                   "_id" => Moped::BSON::ObjectId(pk),"contacts._id" => Moped::BSON::ObjectId(contact_pk)
                 },
                 {
                   $set => {"contacts.$.first_name" => "Bob" }
                 }
                ) 
4

1 に答える 1