J'ai un groupe d'étendues nommées et j'ai une méthode dans l'une d'entre elles que j'aimerais partager entre les autres étendues nommées. J'ai en quelque sorte accompli cela en utilisant define_method et un lambda. Cependant, il y a encore du code répété et je me demande s'il y a une meilleure approche?Méthodes de partage entre des étendues nommées
Voici un exemple simplifié de ce que j'ai. Supposons que j'ai une table de projets et que chaque projet compte de nombreux utilisateurs.
Dans le modèle de l'utilisateur ... Je
filter_by_name = lambda { |name| detect {|user| user.name == name} }
named_scope :active, :conditions => {:active => true} do
define_method :filter_by_name, filter_by_name
end
named_scope :inactive, :conditions => {:active => false} do
define_method :filter_by_name, filter_by_name
end
named_scope :have_logged_in, :conditions => {:logged_in => true} do
define_method :filter_by_name, filter_by_name
end
Alors je l'utiliser comme ...
active_users = Project.find(1).users.active
some_users = active_users.filter_by_name ["Pete", "Alan"]
other_users = active_users.filter_by_name "Rob"
logged_in_users = Project.find(1).users.logged_in
more_users = logged_in_users.filter_by_name "John"
J'aime vraiment votre approche ici. J'avais oublié que vous pouviez passer un bloc en utilisant & method. Cela fonctionne exactement comme j'ai besoin, merci! –