vendredi 31 décembre 2010

activeRecord sans Rails et métaprogrammation

Dans un post précédant, je détaillais le chargement d'une base NoSQL à partir d'une base de données relationnelle en mentionnant l'usage d'Active record sans Rails.
ActiveRecord et maintenant ActiveRelation sont des ORM qui s'utilisent indépendamment des autres composants de Rails.
Il suffit pour cela d'instancier un objet Base en lui fournissant les éléments de connexion à la base de données.


(clic pour agrandir)




J'utilise par la suite ActiveRecord en métaprogrammation :

def _create_class(tclass)

uftclass = "Tempo_" + tclass

eval "

class #{uftclass} < ActiveRecord::Base

set_table_name \"#{tclass}\"

end

"

fields= eval "#{uftclass}.column_names"



end



Ainsi je crée des classes à la volée qui héritent d'Activerecord. Cette opération dynamique se fait par une clause 'eval'.

L'instanciation se fait plus loin dans le code par là aussi un éval:


(clic pour agrandir)

Aucun commentaire: