-
Type: Bug
-
Resolution: Fixed
-
Priority: Unknown
-
Affects Version/s: 7.4.0
-
Component/s: None
-
None
-
Minor Change
After upgrading from mongoid 7.3.4 to 7.4.0 we saw one of our specs stating to fail. The issue boils down to the following code working with the previous version but being broken by v7.4.
class Garden include Mongoid::Document embeds_many :carots def with_carots(carots_list) carots_list.each do |carot_data| carot = carots.find_or_initialize_by(name: carot_data[:name]) carot.id = carot_data[:id] end end end class Carot include Mongoid::Document field :name embedded_in :garden end g = Garden.create g.with_carots([{ name: 'C1' }, { name: 'C2' }]) g.save
In v7.3.4 the code above would produce the following update query:
{ "update" => "gardens", "ordered" => true, "updates" => [ { "q" => { "_id" => BSON::ObjectId('XXX') }, "u" => { "$push" => { "carots" => { "$each" => [ {"_id" => nil, "name" => "C1" }, {"_id" => nil, "name" => "C2" } ] } } } } ] }
but using mongoid v7.4.0 it now produces the following one:
{ "update" => "gardens", "ordered" => true, "updates" => [ { "q" => { "_id" => BSON::ObjectId('XXX') }, "u" => { "$push" => { "carots" => { "$each" => [ { "_id" => nil, "name" => "C1" } ] } } } } ] }
We were able to fix the issue by updating the code to
carot.id = carot_data[:id] if carot_data[:id]
but it seems like a regression as it broke our code while upgrading to a minor version.