Question

Y at-il une meilleure façon d'écrire ce code? Il ne vient que je me sens comme il y a quelque chose de vraiment « rails comme » que je déjà savoir assis ne va pas avec moi,:

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

Après avoir créé un dossier que je prends le modèle parent sélectionné et la création d'un dossier de parent_in_use sur cette base. De cette façon, le modèle peut changer et le record IN_USE vont vivre avec mon objet pour toujours. Les deux classes ParentInUse et ParentTemplate Hériter du parent en utilisant STI.

Je suis sûr que cela devrait être assez simple mais je ne sais pas comment le faire, au fond, je voudrais créer et assigner le dossier en une seule opération.

Était-ce utile?

La solution

Cela va faire ce que vous cherchez.

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

Toutefois, sans autres modifications, il ne fera aucun bien. Parce que la clé étrangère est stockée dans le modèle actuel, ActiveRecord ne sauvera pas le changement si cette association est créée par un rappel after_create. Le nouvel objet ParentInUse sera sauvé, mais la ligne de base de données pour le modèle actuel ne sera pas mis à jour avec cette parent_in_use_id correspondant.

Appel comme un appel before_create retour et les choses vont aller plus en douceur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top