DataMapper仅使用某些列

时间:2014-03-15 20:35:08

标签: ruby orm datamapper ruby-datamapper

我有一个如下代码部分:

users = User.all(:fname => "Paul")

这当然会让所有用户都被称为" Paul"。现在我只需要为每个用户提供一些可用的列,这样就可以用以下内容替换上面的行:

users = User.all(:name => "Paul", :fields => [:id, :fname, :lname, :email])

直到现在一切都按预期工作。不幸的是现在我想与users合作,但是一旦我使用users.to_json这样的内容,其他可用的列也将延迟加载,即使是因为我不需要那些。什么是正确的或至少是以users结尾只包含我需要的每个用户的属性的好方法?

How to stop DataMapper from double query when limiting columns/fields?中建议的中间对象不是一个很好的选择,因为我有很多的地方需要至少定义两次我需要的字段,我也会通过仅从DB加载所需数据来减少速度提升。此外,当选择多行DB(=>集合中的多个对象)而不是仅仅一个时,这样的中间对象似乎也很难构建。

1 个答案:

答案 0 :(得分:0)

如果您经常使用json处理集合,我建议覆盖模型中的as_json方法:

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

您可以在http://robots.thoughtbot.com/better-serialization-less-as-json

找到更详细的说明
相关问题