Как сделать рекурсивные вызовы named_scope для класса Ruby в Rails? - PullRequest
1 голос
/ 21 августа 2009

Предположим, я определил группу named_scopes в модели Person рельсов. Например:

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

... что угодно.

Что я делаю, так это сглаживаю кучу областей действия в route.rb, и в конце концов у меня появляется массив областей действия, например:

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

Теперь я знаю, что могу сделать это:

Person.male.happy.short и получите записи, которые соответствуют этим областям.

Но я хочу иметь возможность сделать это через массив в качестве параметра, потому что, как мы знаем, мы также можем сделать это:

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

, что совпадает с

result = Person.male

Итак, при наличии массива областей, таких как «области», описанных выше, как я могу наилучшим образом получить результат

Person.male.happy.short 

из массива

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

Мучо ценится.

1 Ответ

1 голос
/ 21 августа 2009

Попробуйте это.

@people = ["male", "happy", "short"].inject(Person) { |person, scope| person.send(scope) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...