Прежде всего, если вы используете Rails 3, вы должны использовать scope
вместо named_scope
. То же самое, другое, ошибочное имя (named_scope
все равно будет работать, но не рекомендуется). Теперь, когда это не так ...
Область (или именованная область) принимает два аргумента (символ и лямбда или хеш) и определяет метод класса в этой модели, который возвращает ActiveRecord :: Relation, поэтому вы можете связывать методы на нем.
first
, например find
или all
, возвращает фактический результат из базы данных. По этой причине это не будет работать в области видимости.
Все это говорит о том, что вы можете определить свой собственный метод класса в вашей модели, который дает желаемое поведение (поскольку 2 человека уже ответили, когда я набирал это). Это на самом деле рекомендуется, а не использовать области видимости многими уважаемыми разработчиками в сообществе Rails. Поскольку использование макроса класса scope
просто в любом случае определяет сами методы класса, в этом нет и недостатка, и он обладает преимуществом гибкости (как в вашем случае здесь).