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

Répondre à