ruby-on-rails - 使用 map 构建哈希
问题描述
我有一个 Active Record 结果,并希望为 HIghCharts 图表返回一个简单的数据集,如下所示:
https://www.highcharts.com/demo/pie-basic
数据是一个简单的哈希:
[{
name: 'Chrome',
y: 61.41,
}, {
name: 'Internet Explorer',
y: 11.84
}, {
name: 'Firefox',
y: 10.85
}, {
name: 'Edge',
y: 4.67
}, {
name: 'Safari',
y: 4.18
}, {
name: 'Sogou Explorer',
y: 1.64
}, {
name: 'Opera',
y: 1.6
}, {
name: 'QQ',
y: 1.2
}, {
name: 'Other',
y: 2.61
}]
我如何使用 .map (即 Record.all.map { |r| etc...} 来输出这个?
我自己尝试了几次,结构都被破坏了,输出包括 html 编码的引号等字符。
这是我到目前为止所拥有的:
@vendors.map { |v| { name: v.name, y: v.expenditures.invoices.sum(&:amount).to_f } }
这吐出来:
[
{:name=>"ABC Ltd.", :y=>13382.0},
{:name=>"EFG Inc", :y=>0.0},
{:name=>"ZWY Ltd.", :y=>0.0},
{:name=>"Apple", :y=>21539.4},
{:name=>"Microsoft", :y=>0.0},
{:name=>"Amazon", :y=>12345.0}
]
散列具有 :key=>'data' 格式,但所有 html 都已转义。
解决方案
我假设您的records
表包含这些属性name
, x
, y
, sliced
, selected
。
如果是这种情况,您可以通过执行以下代码片段来生成描述数据集:
Record.all.map do |record|
record.attributes.symbolize_keys.slice(:name, :x, :y, :sliced, :selected).compact
end
以下是代码的解释:
attributes
从哈希模式中返回属性列表,每个键都是一个字符串symbolize_keys
将每个键从字符串转换为符号slice
只选择必要的键compact
删除具有nil
值的键。
推荐阅读
- amazon-web-services - 哪个是 mybucket 的有效存储桶 url
- c# - WPF Storyboard 对象引用
- python - 如何将 value_counts 应用于 DataFrame 的所有元素?
- javascript - 未捕获(承诺中)错误:由于服务器上的错误而无法调用“XXXXX”
- java - ORA-00942: 表或视图不存在 org.springframework.dao.InvalidDataAccessResourceUsageException: 无法提取 ResultSet
- terraform - Terraform:无法将“ip_configuration.0.subnet_id”解析为资源 id - 请求的无效 URI:嵌套
- python - 如何正确使用 rstrip 删除最后出现的符号?
- python - 在 Python 中使用 @property 时的名称修改
- javascript - chrome.runtime.sendMessage - 接收端不存在
- vue.js - Vue识别文本模式并用href替换以纠正资源