In meiner Anwendung habe ich Modelle Post
& Image
. Mein Verein sind:Ruby on Rails - Run after_save nur wenn neue Datensätze
class Post < ActiveRecord::Base
has_many :images
accepts_nested_attributes_for :images, reject_if: :image_rejectable?, allow_destroy: true
class Image < ActiveRecord::Base
belongs_to :post
Ich benutze cocoon gem
für nested_forms
Wenn der Benutzer Bilder hinzufügt, ich habe einige globale Einstellungen, dass Benutzer auf Bilder anwenden können sie hinzufügen.
Ich tue es, indem Sie:
class Post < ActiveRecord::Base
has_many :images
accepts_nested_attributes_for :images, reject_if: :image_rejectable?, allow_destroy: true
after_create :global_settings
private
def global_settings
self.images.each { |image| image.update_attributes(
to_what: self.to_what,
added_to: self.added_to,
)
}
end
Dies funktioniert gut, aber jetzt will ich es so, wenn sie post's images
-edit
will, ich will gleich anwenden Post globale EinstellungenNUR zu neue Datensätze.
Ich habe versucht, es zu tun, indem Sie:
class Post < ActiveRecord::Base
has_many :images
accepts_nested_attributes_for :images, reject_if: :image_rejectable?, allow_destroy: true
after_save :global_settings
private
def global_settings
if new_record?
self.images.each { |image| image.update_attributes(
to_what: self.to_what,
added_to: self.added_to,
)
}
end
end
Dies überhaupt wurden nicht einen Datensatz hinzugefügt Einstellung & global nicht gearbeitet (noch auf new/create
oder edit/update
Aktion).
ich auch mit habe versucht:
after_save :global_settings, if: new_record?
Dies gab mir Fehler: undefined method 'new_record?' for Post
Wie kann ich meine globale Einstellungen für alle neue Datensätze/neue Bilder nur anwenden?
ps: Ich habe versucht, eine Antwort auf SO zu finden, aber nichts hat funktioniert!
Dank @Vikram. Ja, das könnte funktionieren, wenn ich es nur anwenden wollte, wenn "post" neu ist, aber in meinem Fall möchte ich auch globale Einstellungen anwenden, wenn "post" nicht neu ist, aber hinzugefügte Bilder neu sind. – Rubioli
In diesem Fall fügen Sie einfach den gleichen Code zum Bildmodus hinzu. Der Code zum Anwenden globaler Einstellungen sollte in image.rb sein. Was sagen? –