我有一个如下代码部分:
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(=>集合中的多个对象)而不是仅仅一个时,这样的中间对象似乎也很难构建。
答案 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
找到更详细的说明