Ich habe ein Modell user_item
mit einem Attribut namens :primary_image_id
. A user_item
has_many
user_item_images
. Der Zweck der primary_image_id
ist, es gleich der ID eines der user_item_images
so zu setzen, dass ich Logik verwenden kann, damit das Objekt vom Benutzer in der Ansicht nicht gelöscht werden kann.Rails - Set-Attribut der Eltern basierend auf Kind-ID nach beiden zusammen erstellt
Eine user_item
sollte niemals ohne dieses Attributset existieren oder zumindest für ein paar Sekunden existieren, bis das Attribut gesetzt ist. In meiner Form wird die user_item
zusammen mit user_item_images
erstellt.
Es scheint wie user_item_image.id
wird nur nach dem Erstellen festgelegt. Ich versuchte dabei einen after_create
Rückruf auf dem user_item
def set_primary_image_id
self.primary_image_id = self.user_item_images.first.id
end
aber es scheint nicht zu funktionieren, ich nehme an, weil das Kind erstellt Wan't und so nicht eine ID haben.
Ich glaube, ich könnte auf das user_item_image
Modell einen after_create
Rückruf tun, so etwas wie:
def set_user_item_primary_image_id
user_item = self.user_item
user_item.primary_image_id = user_item.user_item_images.first.id
end
aber dies scheint übertrieben, weil es wirklich nicht jedes Mal, wenn ein user_item_image
erstellt getan werden soll.
Ich habe eine verschachtelte Form, die ein 'user_item' sowie' user_item_images' erzeugt, die zum 'user_item' beim Senden gehören. Wenn ich das 'after_create' auf das 'user_item'-Modell lege, würde dies nach der gesamten Transaktion geschehen oder würde es passieren, bevor die' user_items'-Childs existieren? – user4584963
Mit 'build' wird das' after_create' ausgeführt, sobald alle benötigten IDs vorhanden sind. –