我正在尝试制作一个二维数组,用于高图表饼图。我使用gem lazy_high_charts创建图表。我没有包含实际的图表代码,因为这是使用虚拟数据,我只需要弄清楚如何动态地创建我硬编码的相同数组。
我到处都看了,我已经在这几天工作了,似乎没什么用。请帮忙!
我试图让它看起来像这样:
[['Google Organic', 1],['Facebook', 1],['Radio', 2],['Pens', 1], ['Other', 2]]
Google Organic等基于has_many belongs_to关联中的Leads数据库列中的外键。这些数字是每个用户每个ID出现的次数。
现在我明白了,这是正确的,但我不确定如何将id转换为实际名称:
[[3, 1], [4, 1], [5, 2], [7, 1], [8, 2]]
它将通过Leads数据库表中的nonleadaction_id列,并在每次显示每个id时进行计数。然后我需要在那里得到关联,所以我知道" Google Organic"出现一次。
理想情况下,我想将3改为:"谷歌有机",4" Facebook"等等。
主要模式
belongs_to :user
has_one :nonleadaction
用户模型
has_many :leads
NonLeadAction模型
belongs_to :lead
Leads_Controller:
def show
@user = current_user
@actions_breakdown = @user.leads.group(:nonleadaction_id).distinct.count.to_a.drop(1)
end
答案 0 :(得分:1)
试试这个功能。
def steve(array)
# slice array to get index 0 of each sub array
sliceArray = array[0..2].map { |row| row[0] }
# create a hash with appropriate values
strHash = { 1 => "google", 2 => "facebook", 3 => "reddit" };
# map the values to your sliced array
webMap = sliceArray.map { |e| strHash[e] }
# slice array again for index 1 of each sub array
sliceIndexOne = array[0..2].map { |row| row[1] }
#merge two new arrays
mergedArray = webMap.zip(sliceIndexOne)
# return array
return mergedArray
end
答案 1 :(得分:0)
以下是我解决这个问题的方法:
def leads_breakdown
e = self.opportunities.group(:category_id).distinct.count.to_a.drop(1).flatten
evalues = e.values_at(* e.each_index.select {|i| i.even?})
Category.find(evalues).map { |c| [c.reason, c.id] }
end
def source_breakdown
e = self.opportunities.group(:source).distinct.count.to_a
end