3
我不知道我是否有過錯或如果我的方法是錯誤的。如何在限制列/字段時停止DataMapper雙重查詢?
我想獲取一個用戶(限制列/字段只有姓名,電子郵件ID):
@user = User.first(:api_key => request.env["HTTP_API_KEY"], :fields => [:id, :name, :email])
在命令行中的輸出是正確如下:
SELECT "id", "name", "email" FROM "users" WHERE "api_key" = '90e20c4838ba3e1772ace705c2f51d4146656cc5' ORDER BY "id" LIMIT 1
直接上面的查詢後,我有這樣的代碼:
render_json({
:success => true,
:code => 200,
:user => @user
})
render_json()
看起來像這樣,不唯一特別的:
def render_json(p)
status p[:code] if p.has_key?(:code)
p.to_json
end
此時的問題是@user
變量包含了完整的用戶對象(所有其他領域包括在內)和DataMapper的取得了一個額外的數據庫查詢以獲取不包括在:fields
領域約束,從日誌中:
SELECT "id", "password", "api_key", "premium", "timezone", "verified", "notify_me", "company", "updated_at" FROM "users" WHERE "id" = 1 ORDER BY "id"
我的問題是:如何阻止DM從執行額外的查詢?我知道它與它的延遲加載體系結構有關,並且返回JSON中的@user
變量假定我想要整個用戶對象。 我特別不希望密碼字段在用戶對象的任何輸出表示中都可見。
使用DM自帶的序列化模塊時可以看到相同的行爲。
我有同樣的想法,但它不是很優雅 - 特別是在創建一個擁有許多資源的API時,如果已經將數據範圍在另一個本地對象中,則需要編寫大量不需要的代碼。 – SeanNieuwoudt