使用Seer在Rails应用程序中按日期绘制新用户

时间:2010-03-14 02:20:24

标签: ruby-on-rails graph graphing

我想使用Seer实现一个滚动图表,显示过去7天内新用户。

我安装了Seer:

http://www.idolhands.com/ruby-on-rails/gems-plugins-and-engines/graphing-for-ruby-on-rails-with-seer

我正在努力让我的大脑围绕如何实施。

我有一个我想要绘制的用户数组:

@users = User.all(:conditions => {:created_at => 7.days.ago..Time.zone.now})

看不到正确的方法来实现:data_method按create_at日期汇总它们。

任何与Seer做过这种或类似事的人?

在看到Seer示例页面(上面链接)之后,比我更聪明的人能解释一下吗?

1 个答案:

答案 0 :(得分:6)

我假设您尝试在过去7天内按天显示新用户数。如果是这样,您可以执行以下操作

控制器代码

# declare a struct to hold the results
UserCountByDate = Struct.new(:date, :count) 

def report
  @user_counts = User.count( :group => "DATE(created_at)", 
                   :conditions => ["created_at >= ? ", 7.days.ago], 
                   :order => "DATE(created_at) ASC"
                 ).collect do |date, count| 
                   UserCountByDate.new(date, count)
                 end

end

查看代码

<div id="chart"></div>

<%= Seer::visualize(
      @user_counts, 
      :as => :column_chart,
      :in_element =>'chart', 
      :series => {
        :series_label => 'date',
        :data_method => 'count'
      },
      :chart_options => {
        :height => 300,
        :width => 100 * @user_counts.size,
        :is_3_d => true,
        :legend => 'none',
        :colors => "[{color:'#990000', darker:'#660000'}]",
        :title => "New users in last 7 days",
        :title_x => 'date',
        :title_y => 'count'
      }
    )
 -%>

data_method应该出现在用作图表输入的数组的每一行中。 ActiveRecord count方法返回一个哈希值,该哈希值将转换为struct数组,以响应datecount方法。