trigging after_save auf einem eingebetteten Element, wenn es über ‚<<‘ in mongoid zuweisen?

StackOverflow https://stackoverflow.com/questions/3498796

  •  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.

War es hilfreich?

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:

https://github.com/mongoid/mongoid/issues/173

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top