3

我在数据库中有一个列,其中包含对下拉“推荐来源”问题的响应。我正在查询并返回一个哈希:

Clients.count(:all, :group => :referral_source)

这导致以下哈希:

{"Internet search (e.g., Google)?"=>26, 
 "Personal referral (e.g., friend or family)"=>23, 
 "Other"=>11, ""=>51, 
 "Listserv (e.g., neighborhood listserv)"=>5,
 "Walk by"=>5}

在视图中,我想用 d3.js 将这些结果绘制为条形图。我找到了这个不错的d3.js 示例,其中的图表看起来与我希望的图表完全一样。我的问题是示例使用 CSV 数据。

如何将我的数据转换为本示例直接使用的格式。换句话说,我希望我的数据看起来像一个对象数组,以便在视图中传递给 javascript:

var data = [ {"Name": "Internet search (e.g., Google)?", "Count": 26},
             {"Name": "Personal referral (e.g., friend or family)", "Count": 23},
             ... ]

如何修改该哈希(或查询)以使其成为所需的格式?

4

1 回答 1

7

D3-generator.com是开始使用D3.js的不错参考。我还发现D3 教程很有用,但我没有看到带有标签的水平条形图。

我通过将哈希重新映射到新数组来解决我的问题。似乎可以使用原始查询来执行此操作,但我不擅长 Activerecord/SQL 来实现它。

这是我如何将哈希重新映射到可与 Ruby 中的 D3-generator 一起使用的对象数组

@referral_source = Client.count(:all, :group => :referral_source)
remap = @referral_source.map {|k, v| { Name: k, Count: v} } 

=> {{:Name=>"Internet search (e.g., Google)?", :Count=>26}, ... ]

然后我在视图中做了一个 .to_json 。我花了比我想象的要长得多的时间来弄清楚。

于 2013-07-11T19:33:22.673 回答