Ruby DataMapper仅使用某些列

Ruby DataMapper仅使用某些列,ruby,orm,datamapper,ruby-datamapper,Ruby,Orm,Datamapper,Ruby Datamapper,我有如下代码部分: users = User.all(:fname => "Paul") 这当然会导致所有用户都被称为“Paul”。现在,我只需要为每个用户提供的一些列,这将导致将上面的行替换为以下内容: users = User.all(:name => "Paul", :fields => [:id, :fname, :lname, :email]) 到目前为止,一切正常。不幸的是,现在我想与用户一起工作,但一旦我使用了类似用户的内容。对于_json,其他可用列也将延迟

我有如下代码部分:

users = User.all(:fname => "Paul")
这当然会导致所有用户都被称为“Paul”。现在,我只需要为每个用户提供的一些列,这将导致将上面的行替换为以下内容:

users = User.all(:name => "Paul", :fields => [:id, :fname, :lname, :email])
到目前为止,一切正常。不幸的是,现在我想与
用户一起工作
,但一旦我使用了类似
用户的内容。对于_json
,其他可用列也将延迟加载,即使我不需要这些列。如果
用户
只包含我需要的每个用户的属性,那么正确的或至少是好的方法是什么


像中建议的中间对象不是一个很好的选择,因为我有很多地方需要定义至少两次我需要的字段,而且我会失去从数据库中只加载所需数据而获得的速度提升。此外,当选择了多行DB(=>集合中的多个对象)而不是一个时,这种中间对象的构建似乎也非常难看。

如果您通常使用json处理集合,我建议在您的模型中重写as_json方法:

def as_json(options = nil)
  # this example ignores the user's options
  super({:only => [:fname]}.merge(options || {}))
end

您可以在这里找到更详细的解释

,如果我只需要用户模型,并且始终需要相同的属性,这将非常有效。不幸的是,我有许多不同的模型,对于每个模型,我需要不同属性的不同用例。此外,如果我没有弄错,您的解决方案仍然会让DataMapper触发第二个数据库查询以获取不需要的属性/列。