2009-10-26 9 views
3

Salut, j'ai un named_scope dans mon modèle User comme suit.Comment réutiliser des étendues nommées?

named_scope :by_gender, lamdba { |gender| { :conditions => { :gender => gender } } } 

Je veux créer deux autres champs nommés qui réutilisera celui-ci quelque chose comme,

named_scope :male, lambda { by_gender('male') } 
named_scope :female, lambda { by_gender('female') } 

Toute idée de quoi faire?

Répondre

3

Vous pouvez fournir des méthodes de classe qui effectuent le passage de l'argument filaire:

def self.male 
    by_gender('male') 
end 

def self.female 
    by_gender('female') 
end 

ou, le named_scope que vous utilisez est si simple que vous pouvez découper la portée de by_gender et utiliser simplement:

named_scope :male, :conditions => {:gender => 'male'} 
named_scope :female, :conditions => {:gender => 'female'} 

La deuxième option est bien sûr conditionnelle à ce que vous n'ayez pas besoin de la portée by_gender explicitement ailleurs.

+0

Hmmm fournissant des méthodes de classe est logique. Il retournera un proxy d'association pour que je puisse même les enchaîner. Merci. – Waseem

Questions connexes