Dynamic act_as

Une autre voie que tu peux songer à explorer c’est peut-être la
sérialisation d’objets en base de données dans un champs texte ou
binaire.

L’idée ce serait par exemple de faire que tes modules de comportements
incluent un module commun (appellons-le Behaviour pour faire original)
qui
ait une méthode “extend” qui crée le cas échéant un tableau interne
@module
dans l’instance qu’il étend, et ajoute le nom du module étendu dans ce
tableau. Quand tu sauvegarde ton objet tu sérialise ton tableau, et
quand tu
régénère ton objet tu ré-étend les modules dont le nom est dans le
tableau.

Mais ça garde quand même l’inconvénient d’être très compliqué, de
demander
de maîtriser vraiment bien le framework rails pour que tes modules se
sauvegardent et se régénèrent automagiquement, et aussi d’aller très
près
des limites de Ruby (parce que je ne crois pas que l’on puisse retirer
un
module une fois attribué, mais je peux me tromper sur ce point).

houla, ça me parait bien complexe comme solution. :wink:

C’est peut-être aussi que le problème est bien complexe…

Si j’arrive à quelque chose de satisfaisant et facilement explicable,
j’indiquerai ici comment j’ai fait en guise de remerciement pour votre
aide dans ma réflexion.

Je suis d’avance tout ouïe.

je suis parti sur un truc plus simple:
une classe commune à tous mes objets sans aucun propriété, juste un id.
Et toutes les propriétés sont des composants.
Les composants sont développés par des développeurs sous forme de module
et l’administrateur les associe à des objets pour créer des objets avec
des comportements propre à chacun.
Ainsi, chaque objet appartient à la même classe, mais peut avoir des
comportements différents.
Après, y a toute une mécanique active record pour simuler du has_one
dynamique en create, load, unload et delete.