Когда я пытаюсь запустить следующий код, DataMapper вызывает 3 запроса только в этих двух строках. Может ли кто-нибудь объяснить, почему это будет делать это?
@u = User.first(:uid => 1, :fields => [:uid, :name])
json @u
Это вызывает следующие запросы:
SELECT "uid", "name" FROM "users" WHERE "uid" = 1 ORDER BY "uid" LIMIT 1
SELECT "uid", "email" FROM "users" WHERE "uid" = 1 ORDER BY "uid"
SELECT "uid", "accesstoken" FROM "users" WHERE "uid" = 1 ORDER BY "uid"
Стоит отметить, что datamapper имеет валидацию name
на предмет того, что он => unique
.
Кроме того, токен доступа загружается лениво, поэтому его следует запрашивать только при специальном запросе, что должно происходить при сериализации его в объект json.
РЕДАКТИРОВАТЬ: я добавил свой класс модели для уточнения. Я просто хочу сделать один запрос для uid и имени без необходимости извлекать их по отдельности из объекта. Может быть, это единственный способ?
property :uid, Serial
property :name, String
property :email, String
property :accesstoken, Text
ОТВЕТ: Используйте гем dm-serializer со встроенной поддержкой https://github.com/datamapper/dm-serializer