Le 25/06/07, Patrick Aljord<[EMAIL PROTECTED]> a écrit :
> > > J'ai donc créer une fonction dans Profile:
> > >
> > > def getmodels(model_name)
> > > model_name=model_name.constantize
> > > model_name.find :all,
> > > :from=>model_name.collection_path(:profile_id=>self.id)
> > > end
[...]
> > class Profile < ARes::B
> > def emails
> > Email.find :all, :params => { :profile_id => id }
> > end
> > end
>
> oui c'est ce que j'avais fait en premier, mais vu qu'un profile n'as
> pas seulement des emails mais aussi des phones, fax, invites,
> adresses, urls etc, je me suis dit que quelque chose de plus générique
> ferait mieux l'affaire plutôt que d'avoir 50 fonctions qui font la
> même chose. C'est plus DRY comme ça :)
> C'est vrai que j'aurai du préciser dans ma question que le profile
> n'avait pas que des emails.
Il faut faire un peu de métaprogrammation alors. T'en étais pas
loin.
module Castafiore
def babar *args
args.map(&:to_s).each do |name|
define_method(name.underscore.pluralize) do
name.classify.constantize.find :all, :params => { :profile_id => id }
end
end
end
end
ARes::Base.extend Castafiore
class Profile < ARes::Base
babar :profiles, :phones, :addresses, :invites
end
+ choisir des noms plus appropriés :)
-- Jean-François.
--
membre du CA de Ruby France.
Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org )
--~--~---------~--~----~------------~-------~--~----~
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]
-~----------~----~----~----~------~----~------~--~---