Bonjour. Pour donner en quelques mots le contexte, je me suis pris de faire un plugin (première tentative) pour doter ActiveRecord d'une fonctionnalité de sérialisation dans le genre de « serialize :un_attribut[, SaClasse] » mais utilisant Marshal au lieu et place de YAML, donc quelque chose du genre : « marshalize :un_attribut [, SaClasse] » (dans un model).
Il existe une sorte de hooker interne par le module ActiveRecord::Serialization pour créer ce genre de chose, mais je me suis dit que c'était une bonne occasion d'étudier les entrailles d'ActiveRecord, donc de s'en passer pour l'exercice. Après un script/generate plugin marshalize, et après avoir généré un scaffold pour une table de test birds / modèle Bird avec un attribut songs (type text), mon code ressemble à ceci : - models/bird.rb : http://pastebin.com/f6acb09db - vendor/plugins/marshalize : - init.rb : http://pastebin.com/f3a26d8ad - lib/marshalize.rb : http://pastebin.com/f59317de3 Sur le papier, il me semble avoir suivi à la lettre les indications de méta-programmation habituelles pour la création d'un plugin, mais quelle que soit la variante, je bute sur la même erreur, du type : /opt/ruby1.9/lib/ruby1.9.1/gems/1.9.1/gems/activerecord-2.3.2/lib/ active_record/base.rb:1964:in `method_missing': undefined method `marshalize' for #<Class:0xab925d0> (NoMethodError) En gros, il me semble que le code du plugin n'ai pas exécuté, ce qui expliquerait que le mixin n'a pas eu lieu et que la méthode n'est pas disponible (la ligne 1964 correspond à un appel à super pour le method_missing d'ActiveRecord, marshalize ne correspondant à aucun DynamicFinder ou autre). Cela dit, le #<Class:...> m'intringue, je m'attendais à du #<Bird:...>. Bref, je suis un peu perdu, et préfère demander conseil en même temps que je recherche la source de mon erreur ;) Aurais-je raté une étape essentielle ? Merci d'avance ^^ --~--~---------~--~----~------------~-------~--~----~ Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement envoyez un e-mail à l'adresse [email protected] -~----------~----~----~----~------~----~------~--~---
