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" }
}
)