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]
-~----------~----~----~----~------~----~------~--~---

Répondre à