Creation dynamique d'accesseurs - Ruby/Rails - Programmation
Marsh Posté le 20-07-2009 à 21:10:28
Ton attr_accessor est exécuté une seule fois dans le contexte de ElementsController
Faut faire ton bricolage au niveau de la métaclasse (la classe dont ton ElementsController est une instance).
edit: http://whytheluckystiff.net/articl [...] early.html et si c'est pas suffisant, google.
Marsh Posté le 20-07-2009 à 22:00:51
Voilà c'est exactement sur ce genre de truc que j'ai des lacunes
Bon bein merci, je vais chercher de la doc parce que là son
Code :
|
J'y comprend juste absolument rien.
Marsh Posté le 20-07-2009 à 22:07:40
esox_ch a écrit : Voilà c'est exactement sur ce genre de truc que j'ai des lacunes
J'y comprend juste absolument rien. |
Non mais faut lire le texte hein, ça c'est juste l'exemple initial "zomg magic happens here totoz", derrière il reprend tout de 0
Marsh Posté le 20-07-2009 à 22:12:16
Oui oui j'ai vu qu'il reprend pas mal de notions par la suite (je suis même tombé sur un site plus "terre à terre" ( http://practicalruby.blogspot.com/ [...] ction.html ) que je suis en train de lire..
Mais y a des trucs que je comprend pas encore quand même..
Par exemple, pourquoi il ne fait pas juste?
Code :
|
Je capte pas la différence..
Marsh Posté le 21-07-2009 à 11:19:28
Bon j'ai un peu avancé grâce à la doc que j'ai lue, mais reste que je comprend pas quelque chose
Code :
|
Pourquoi test.mec n'existe pas?
Parce que le truc du define_method est bien ce que je cherche, mais malheureusement j'ai pas trouvé comment remplacer le
Code :
|
par un define_method (J'ai l'impression qu'on peut pas lui passer de paramètres, c'est exact? )
Edit :
Je viens de tester la chose suivante :
Code :
|
Et bien entendu ça marche ... Mais comment enfermer ça directement dans la classe?
Marsh Posté le 21-07-2009 à 11:37:49
Bon je suis arrivé à faire marcher le "mec". En fait suffit d'utiliser un class_eval
Code :
|
Mais ça ne résous pas pour autant mon problème de pouvoir définir leur nom "à la volée"
Marsh Posté le 21-07-2009 à 13:54:07
Bon,
J'ai encore un peu avancé et j'arrive à faire définir mes méthodes "à la volée"
Code :
|
Le soucis c'est que ça me crée pas de fonction daugther, parce que c'est uniquement executé dans la classe mère
Je vois vraiment pas comment changer ça
Marsh Posté le 21-07-2009 à 15:14:04
Bon j'ai trouvé la réponse sur la mailling list
Code :
|
J'étais tellement focalisé sur toutes les histoires de singleton & co que j'ai oublié le hook self.inherited
Le seul "point noir" de cette méthode c'est que les classes définies dans la classe mère, sont héritées par la classe fille.. Je vais voir, si ça m'embête je passerai un coup de remove_method dans le tas
Merci à tous
Marsh Posté le 20-07-2009 à 20:41:56
Bonjour,
Ce que j'essaie de faire est "simple". J'ai une classe ElementsController, cette classe est héritée par plein de monde et elle contient plein de routines utilisées sous forme "directe" ou via spécialisation par ses classes filles.
Ce que je veux c'est que chaque classe fille (par exemple FilleController) obtienne des accesseurs "à son nom" sans que je doive les définir explicitement dans chaque classe (sinon je vais les oublier et pis c'est moche).
Donc j'aimerais que FilleController ait une variable d'instance @fille qui soit crée et accessible (comme si je faisais un attr_accessor :fille quoi)
J'ai tenté de faire la chose suivante mais ça ne marche pas :
Mais si je fais un
Bein ça ne marche pas ...
NoMethodError: undefined method `fille=' for #<FilleController:0xb711b6e4>
from (irb):3
Quelqu'un voit le pourquoi? Sinon vous croyez qu'il y a mieux/plus simple? Parce que je trouve quand même pas super joli comme truc
---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait