jd a écrit :
> 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 ?
Tu t'es basé sur le code d'un plugin existant ou pas ?

Car j'ai pas l'impression que ca soit la bonne manière de faire pour 
ajouter ta méthode. Rails est hélas une catastrophe par rapport à Ruby 
sur l'inclusion de mixins typiquement.

-- 
Cyril Mougel
http://blog.shingara.fr/

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