вызов, который вызывает результат вызова - PullRequest
0 голосов
/ 12 февраля 2011

При использовании фреймворка мне нужно 2 области ActiveRecord:

scope :tagged_with, lambda { |tag| {:conditions => [" tags like ? ",  "% #{tag} %"] } }
scope :tagged_with_any, lambda { |tag_array | [HERE NEW IMPLEMENTATION] }

Я хочу, чтобы вторая область была основана на первой области.Если бы вы делали это жестко, вы бы сделали массив из 2 элементов:

lambda { | tag_array | tagged_with(tag_array[0]).tagged_with(tag_array[1]) }

, который работает, но как мне сделать это универсальнымработа.

1 Ответ

1 голос
/ 12 февраля 2011

Это приемлемо?

named_scope :tagged_with_all, lambda { |tag_array| tag_array.inject(self, :tagged_with) }

[edit] переименован в tagged_with_all, поскольку это то, что он действительно делает.Для tagged_with_any области с именами Vanilla не реализуют OR-конкатенации;объединение условий OR "вручную" из областей действия выполнимо, но немного грязно.Обратите внимание, что у вас есть библиотеки, такие как Arel или Metawhere.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...