trigging after_save auf einem eingebetteten Element, wenn es über ‚<<‘ in mongoid zuweisen?
-
29-09-2019 - |
Frage
Ich habe mich gefragt, ob es eine Möglichkeit war, den after_save Rückruf auf einem embedded_in Objekt in Mongoid Mapper auszulösen.
Beispiel:
i = Image.new(:file => file)
user.images << i
# => i.after_save should be triggered here
Ich bin mir bewusst, dass, wenn ich i.save
nach Worten rufen, feuert es aber wirklich schwer, sich daran zu erinnern, dass in meinem Code zu tun.
Auch user.images.create(:file => file)
Aufruf ist keine Option, weil ich einen Scheck tun sicher, dass die gleiche Datei hochgeladen nicht zweimal zu machen.
Lösung
Die einzige wirkliche Lösung ist save
auf dem eingebetteten Dokument zu nennen. Hier ist eine Art und Weise haben getan, automatisch:
class User
references_many :images do
def <<(new_elm)
returner = super
new_elm.save
returner
end
end
end
Mehr Infos hier:
Andere Tipps
Okay, das ist eine alte Frage, aber mit dem neuesten Mongoid, können Sie:
http://mongoid.org/en/mongoid/docs/relations.html
Cascading Rückrufe
Wenn Sie die eingebettete Dokument Rückrufe Feuer soll, wenn eine Persistenz Betrieb seiner Mutter Aufruf, müssen Sie die Kaskade Rückrufe Option auf die Beziehung liefern.
Rückrufe Kaskadierung ist nur auf embeds_one
und embeds_many
Beziehungen.
class Band
include Mongoid::Document
embeds_many :albums, cascade_callbacks: true
embeds_one :label, cascade_callbacks: true
end
band.save
# Feuert alle speichern Rückrufe auf dem Band, Alben und Label.