我不确定我在这里是否有错,或者我的方法是否有问题。
我想获取一个用户(将列/字段限制为名称、电子邮件、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 执行附加查询?我知道这与它的延迟加载架构有关,并且@user
在 JSON 中返回变量假定我想要整个用户对象。我特别不希望密码字段在用户对象的任何输出表示中可见。
使用 DM 自己的序列化模块时可以看到相同的行为。