Вы можете рассматривать область действия класса как Model
(таблица в СУБД) и область действия экземпляра как Resource
(строка в СУБД).Теперь, если вы определяете методы класса (как вы сделали с self.my_username
), вы работаете с Model
(он же таблица, иначе все строки).Если вы определите методы экземпляра, они будут доступны для Resource
(он же одна строка).
Типичные сценарии использования методов класса - это создание (цепочек) запросов / запросов.Они в основном будут работать с тем же эффектом, что и Active Record 2.x named_scope
.Вы можете вызвать цепочку методов класса и не выполнять ни одного запроса, если у вас нет явного доступа к данным, которые должен предоставить запрос.DataMapper
будет продолжать создавать и изменять объекты запросов до того момента, когда вам действительно потребуется доступ к данным.Это работает только в том случае, если каждый метод класса в цепочке возвращает экземпляр DataMapper::Collection
, который обычно достигается путем возврата результата вызовов в all
(или объединения их с операторами набора, такими как +
, -
, &
и |
.