- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我不确定这是我的错还是我的方法有问题。
我想获取一个用户(将列/字段限制为姓名、电子邮件、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 自己的序列化模块时可以看到相同的行为。
最佳答案
我认为你应该使用一个中间对象来进行 json 渲染。
首先,从数据库查询用户:
db_user = User.first(:api_key => request.env["HTTP_API_KEY"], :fields => [:id, :name, :email])
然后,创建一个“json 对象”来操作这个用户:
@user = { id: db_user.id, name: db_user.name, email: db_user.email }
关于ruby - 限制列/字段时如何阻止DataMapper进行双重查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19360786/
我正在阅读 Zend Framework 快速入门教程,在他们的演示代码中,他们使用了一个数据映射器,该映射器使用 Zend_DB_Table 来访问数据库(参见:http://framework.z
到目前为止,我一直在所有c#数据库驱动的应用程序中使用Active记录。但是现在我的应用程序需要将我的持久性代码与业务对象分开。我已经阅读了很多有关Martin Fowler的数据映射模式的文章,但是
我读过很多有关 DataMapper 模式的内容。 据我所知,DataMapper 应该将表单模型对象映射到实体对象。因此被用作某种适配器。 我理解正确吗? 最佳答案 不,Data Mapper是关于
我正在尝试使用新的 DataMapper 模型映射遗留 MySQL 数据库。 MySQL 模式: CREATE TABLE IF NOT EXISTS `backer` ( `backer_id`
我有一个带有几个字段和唯一约束的数据映射器对象。实际上,这确保了每个用户 ID 每个日期代码只能创建一条记录。 class Form include Datamapper::Resource
问题是我无法将列类型更改为“文本” 这是我看到的错误: DarkBook:playground Justin$ rake migrate_up (in/Users/Justin/Dropbox/Bus
我只是希望以随机顺序返回 DataMapper 记录。 这是我的模型(使用 DataMapper 和 sqlite3 数据库): class Movie include DataMapper::R
我在以下代码中遇到关联问题。 我遇到的错误是对最后一行代码的评论。 编辑:我简化了代码... require 'rubygems' require 'data_mapper' # requires a
我正在使用 Ruby/Sinatra 和 Datamapper 编写网络应用程序。我有一些表,我想将数据预加载到其中。有没有最佳实践?例如。我有一个名为 references 的表 id name u
我正在使用带有 DataMapper MySql 数据库的简单 Sinatra 网络应用程序。我声明了一个具有属性的 Datamapper Post 类 property :created_at, D
我有以下模型 class TagType include DataMapper::Resource ## Relationships belongs_to :category has
我正在使用 Ruby 中的 Sinatra 和 Datamapper 编写一个简单的应用程序,但我遇到了一个问题 — 当我尝试将数据保存到我的 SQLite 数据库时,没有任何变化。但是当我尝试安装数
我有一张产品表,其中包含 SKU、名称等属性。 似乎我需要为每个类别的产品创建单独的表格,因为类别的功能种类繁多。 假设我有一张放 Boot 、工具和帽子的 table /类 我想(除非有更好的方法)
我正在用 PHP 编写一个必须写入三个持久层的系统: 一个网络服务 两个数据库(一个mysql一个mssql) 这是遗留系统的原因,无法更改。 我想使用 DataMapper 模式,并且我正在尝试建立
我有一个这样的数据库模式 DataMapper.setup :default, "sqlite://#{Dir.pwd}/image.db" class Image include DataM
我有两个看起来像这样的模型 class Stage include DataMapper::Resource property :id, Serial belongs_to :
使用以下模型,我正在寻找一种高效且直接的方法来返回所有具有 0 个父任务(本质上是顶级任务)的任务。我最终也想返回 0 个子任务之类的东西,所以一个通用的解决方案会很好。这是否可以使用现有的 Data
我目前正在开发一个基于现有数据库的新应用程序,使用 DataMapper 进行数据访问。但是,它在处理外键时的约定不是数据库使用的约定。 例子: class Invoice include Dat
谁能给我解释一下这是怎么回事吗? 这是我放在一起向大家展示的示例: class Person include DataMapper::Resource property :id, Serial
class Alpha include DataMapper::Resource property :id, Serial property :name, String has n
我是一名优秀的程序员,十分优秀!