【问题标题】:Rails - Active Record :conditions overrides :selectRails - Active Record:条件覆盖:选择
【发布时间】:2011-01-28 18:08:21
【问题描述】:

我有一个相当大的模型,我只想为每条记录检索一组选定的字段,以保持我正在构建的 JSON 字符串很小。

将 :select 与 find 一起使用效果很好,但我的主要目标是将条件逻辑与关联模型一起使用。真的是在命名范围内使用 lamda 来做到这一点的唯一方法吗?我担心这可能是不必要的,但我想了解是否有办法使 :select 在条件下工作。

这行得通:

@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 字符串太大了。

感谢您的指点!

【问题讨论】:

  • 你确定条件有问题吗?我没有对此进行测试,但包含看起来更可疑。
  • 我可能完全糊涂了,但是否需要包含相关模型才能对其应用条件?如果我这样做 @sites = Site.find :all, :select => 'id,foo,bar', :include => :relatedmodel :select 中的 3 个属性都是返回的,因为我希望会发生添加条件之后。

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


【解决方案1】:

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

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

上面的调用序列化了带有字段namelocationSite 对象。

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

上面的调用序列化了带有name字段的Site对象和location,并包含带有description字段的RelatedModel对象。

【讨论】:

  • 这很棒。我没有考虑查看 to_json 调用,因为我正忙于尝试让 activerecord 给我想要的东西。这完美地工作,我的 JSON 对象现在是一个合理的大小。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多