suppose I have two models like this:
class Person
include Mongoid::Document
field :name
validates_presence_of :name
embeds_many :tags
accepts_nested_attributes_for :tags
end
class Tag
include Mongoid::Document
embedded_in :person, :inverse_of => :tags
end
and i create a person with no tags
gerad = Person.create :name => 'Gerad'
finally, say my controller code tries to subsequently update the attributes for that person
gerad.update_attributes(:tags_attributes => { '0' => { :name => 'tag' }}, :name => '')
now, because of mongoid's automatic persistence of related documents if the parent record is persisted, I get an inconsistent state: namely the new tags have been persisted, but the name has not.
gerad.reload
gerad.name # => 'Gerad'
gerad.tags.map(&:name) # => ['name']
this is causing me problems in my controller code, because in the case of errors, I do not want the record partially saved, but I do want the associations preserved in memory so I can re-render the form correctly with the associations the user attempted to create
as it stands, I can't figure out how to add embedded documents to the parent without persisting the parent, anybody have guidance?