Ich habe eine App, die einen Beitrag aktualisiert, wenn es existiert, andernfalls erstellt es einen neuen. Dieser Beitrag enthält eingebettete Dokumente:Mongo/Mongoid wird ein Modell erstellen, aber nicht aktualisieren
class Post
embeds_one :tag, :as => :taggable, :class_name => 'TagSnippet'
end
class TagSnippet
include Mongoid::Document
field :name
embedded_in :taggable, polymorphic: true
end
Der Pfosten ist in einer Steuerung mit dem folgenden Code aktualisiert:
@post = Post.where(--some criteria which work--).first
if @post
@post.attributes = params
else
@post = Post.new(params)
end
@post.save!
Dieser Code läuft und aktualisiert die nicht eingebetteten Dokumente, aber die eingebetteten Dokumente nicht aktualisiert . Seltsamerweise, wenn ich in Rubymine debugge, ändern sich alle Attribute der @post
entsprechend (einschließlich der eingebetteten), aber unabhängig von der Datenbank wird nicht aktualisiert.
Das deutet darauf hin, dass es ein Mongo- oder Mongoid-Problem ist, aber das Zurückrollen von Mongo- und Mongoid-Edelsteinen ergab keine Veränderung.
Ich benutzte tatsächlich Mongoids embeds_one/embedded_in, und ich habe meine Antwort aktualisiert, um das zu reflektieren. Danke für die schnelle Antwort! –
Wie auch immer, überprüfen Sie, ob meine Theorie noch gilt. –
'@ post.tag_changed?' Führt zu einem Fehler. '@ post.tag.name_changed?' führt zu 'true', so dass es aussieht, als könnte es etwas anderes sein. –