2009-08-21 7 views
1

Supposons que j'ai défini un groupe de named_scopes dans un modèle Person de rails. Par exemple:Comment faire des appels récursifs named_scope sur une classe Ruby dans Rails?

named_scope :male ... 
named_scope :tall 
named_scope :short 
named_scope :happy 

... peu importe.

Eh bien, ce que je fais est englobement un tas de champs dans routes.rb et finalement j'avoir un éventail de champs ... comme ceci:

scopes = ["male", "happy", "short"] 

Maintenant, je sais que je peux le faire :

Person.male.happy.short et d'obtenir les enregistrements qui correspondent à ces étendues.

Mais je veux être en mesure de le faire via le tableau en tant que paramètre, parce que nous savons que nous pouvons aussi le faire:

somescope = "male" 
result = Person.send(somescope) 

qui est le même que

result = Person.male 

Alors étant donné un éventail de champs d'application, comme les « champs », un au-dessus comment puis-je obtenir le meilleur résultat

Person.male.happy.short 

du tableau

["male", "happy", "short"] 

?

beaucoup apprécié.

Répondre

1

Essayez ceci.

@people = ["male", "happy", "short"].inject(Person) { |person, scope| person.send(scope) } 
Questions connexes