首页 > 解决方案 > 从查询后生成的模型中删除属性

问题描述

我使用执行查询find_by_sql,返回的属性之一是count(*). 但我只想提取不同变量的计数并将其从返回的模型中删除。下面是一个查询示例:

Model.find_by_sql("select prop1, sum(prop2), count(*) OVER() AS full_count from table 
                   group by prop1
                   limit 3")

Model我得到一个带有属性( )的数组,Model.attributes如下所示:

[{prop1: "A", prop:3, full_count: 20}, {prop1: "B", prop:4, full_count: 20}, {prop1: "C", prop:6, full_count: 20}]

这就是渲染到前端的内容。

但基本上我full_count会将属性存储在一个变量中,并且我想从数组中的对象中删除它。所以我希望结果是:

[{prop1: "A", prop:3}, {prop1: "B", prop:4}, {prop1: "C", prop:6}]

我试过这样做:

query_result.each do |obj|
   obj.attributes.delete('full_count')
end

但这没有用。

任何帮助将不胜感激!我尝试搜索但没有找到任何有效的方法。

标签: ruby-on-railspostgresql

解决方案


如果您要呈现为 JSON,您可以这样做

query_result = Model.find_by_sql("select prop1, sum(prop2), count(*) OVER() AS full_count 
                                  from table 
                                  group by prop1 
                                  limit 3")

full_count = query_result.first.full_count

query_result.as_json(except: :full_count)

推荐阅读