Я согласен с ctcherry, что это не очень полезно, но, сказав это, мне нужно было сделать это для проекта, над которым я работал. Нам нужно было продублировать sql в областях, чтобы мы могли повторно использовать sql для разных типов поиска. Вместо того, чтобы поддерживать одинаковый sql в двух разных местах, я выбираю извлечение sql из области видимости.
Код ниже - это то, что я придумал. Это некрасиво, но работает под Rails 3.0
def extract_named_scope_clause(scope, args)
# where_clauses will return an array of clauses for an entire relationship.
# As this is only run a single scope, we only ever care about the first.....
clause, *bind_vars = self.send(scope, args).where_clauses.first
# prefix 'and ' to the string, add some spaces and append any bind variables
if clause
[" and #{clause} ", bind_vars]
else
nil
end
end