J'ai un objet de modèle ActiveRecord Foo
; il représente une ligne de base de données standard.Prévention d'ActiveRecord save() sur une instance
Je souhaite être en mesure d'afficher les versions modifiées des instances de cet objet. Je voudrais réutiliser la classe elle-même, car elle a déjà tous les aspects dont j'aurai besoin. (Par exemple: j'ai déjà une vue qui affiche les attributs appropriés). Fondamentalement, je veux cloner l'instance du modèle, modifier certaines de ses propriétés et la renvoyer à l'appelant (vue, test, etc.).
Je fais et non que ces modifications d'attributs retournent dans la base de données. Cependant, je souhaite inclure l'attribut id
dans la version clonée, car cela facilite beaucoup la gestion des routeurs. Ainsi, je prévois d'appeler ActiveRecord::Base.clone()
, en définissant manuellement l'ID de l'instance clonée, puis en modifiant l'attribut approprié pour la nouvelle instance. Cela m'a inquiété cependant; un save()
sur l'instance modifiée et mes données d'origine seront obturées. Donc, je cherche à verrouiller la nouvelle instance afin qu'elle ne nuise à rien d'autre. Je prévois déjà d'appeler freeze()
(étant entendu que cela empêche d'autres modifications à l'objet, bien que le documentation isn't terribly clear). Cependant, je ne vois pas de moyen évident d'empêcher un save().
Quelle serait la meilleure approche pour y parvenir?
Si vous avez besoin de perdre son que de manière significative avec l'objet standard ActiveRecord, il y a probablement une meilleure façon d'aborder le problème. – Matchu
Je suis certainement ouvert aux alternatives –