二维数组highcharts活动记录关联

时间:2014-08-15 19:34:13

标签: sql ruby-on-rails arrays activerecord highcharts

我正在尝试制作一个二维数组,用于高图表饼图。我使用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

2 个答案:

答案 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