我有一个相当大的模型,我想只为每条记录检索一组选定的字段,以便保持我构建的JSON字符串很小。
使用:select with find效果很好,但我的主要目标是使用带有关联模型的条件逻辑。在命名范围内使用lamda实现这一点的唯一方法是什么?我担心这可能是不必要的,但我想了解是否有办法让:选择有条件的工作。
这有效:
@sites = Site.find :all, :select => 'id,foo,bar'
当我尝试这个时:
@sites = Site.find :all, :select => 'id,foo,bar', :include => [:relatedmodel],
:conditions => ["relatedmodel.type in (?)", params[:filters]]
条件有效,但每条记录都包含所有使我的JSON字符串过大的Site属性。
感谢您的任何指示!
答案 0 :(得分:2)
to_json调用支持:except
和:only
选项,以在序列化期间排除/包含模型字段。
@sites.to_json(:only => [:name, :foo, :bar])
上面的调用将Site
个对象序列化为字段name
和location
。
@sites.to_json(:only => [:name, :location],
:include => { :relatedmodel => {
:only => [:description]
}
}
)
上面的调用将Site
个对象序列化为字段name
和location
以及包含RelatedModel
字段的description
个对象。