Rails - 活动记录:条件覆盖:选择

时间:2010-03-17 20:00:12

标签: ruby-on-rails activerecord select conditional-statements

我有一个相当大的模型,我想只为每条记录检索一组选定的字段,以便保持我构建的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属性。

感谢您的任何指示!

1 个答案:

答案 0 :(得分:2)

to_json调用支持:except:only选项,以在序列化期间排除/包含模型字段。

@sites.to_json(:only => [:name, :foo, :bar])

上面的调用将Site个对象序列化为字段namelocation

@sites.to_json(:only => [:name, :location], 
        :include => { :relatedmodel => { 
                          :only => [:description] 
                      } 
                    }
         )

上面的调用将Site个对象序列化为字段namelocation以及包含RelatedModel字段的description个对象。