Domanda

C'è un modo migliore di scrivere questo codice? Semplicemente non sedersi proprio con me, mi sento come se ci fosse qualcosa di veramente 'rotaie, come' che dovrei già sapere:

belongs_to :parent_in_use
belongs_to :parent_template

def after_create
  new_parent_in_use = ParentInUse.create!(self.parent_template.attributes)
  self.update_attribute(:parent_in_use_id, new_parent_in_use.id)
end

Dopo aver creato un record mi prendo il modello principale selezionato e la creazione di un record parent_in_use basato su di esso. In questo modo il modello può cambiare e il record in_use vivranno con il mio oggetto per sempre. Entrambe le classi ParentInUse e ParentTemplate ereditano da Parent utilizzando STI.

Sono sicuro che questo dovrebbe essere abbastanza semplice, ma non so come farlo, in fondo mi piacerebbe creare il e assegnare il record in una sola operazione.

È stato utile?

Soluzione

Questo farà quello che stai cercando.

def after_create 
  self.parent_in_use = ParentInUse.create!(parent_template.attributes)
end

Tuttavia, senza altri cambiamenti non farà nulla di buono. Perché la chiave esterna viene memorizzata nel modello attuale, ActiveRecord non salverà il cambiamento se questa associazione è stato creato da una chiamata after_create indietro. Il nuovo oggetto ParentInUse viene salvato, ma la riga database per il modello corrente non verrà aggiornato con quello corrispondente parent_in_use_id.

Lo chiami come una chiamata before_create indietro e le cose andranno più agevolmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top