我想使用 chartkick 制作一个用户注册数量(每天)的折线图,这是一个简单的一行代码,但是它给出了错误
`undefined method `group_by_day' for #<Class:0x00000004b4fbf0>`
在我的观点中我有
<%= line_chart User.group_by_day(:created_at).count %>
错误日志:
Rendered admin/dashboards/index.html.erb within layouts/application (145.2ms)
Completed 500 Internal Server Error in 1018ms
NoMethodError - undefined method `group_by_day' for #<Class:0x00000004b4fbf0>:
activerecord (3.2.14) lib/active_record/dynamic_matchers.rb:55:in `method_missing'
app/views/admin/dashboards/index.html.erb:38:in `_app_views_admin_dashboards_index_html_erb___3330517857505238097_39214860'
actionpack (3.2.14) lib/action_view/template.rb:145:in `block in render'
activesupport (3.2.14) lib/active_support/notifications.rb:125:in `instrument'
actionpack (3.2.14) lib/action_view/template.rb:143:in `render'
actionpack (3.2.14) lib/action_view/renderer/template_renderer.rb:48:in `block (2 levels) in render_template'
actionpack (3.2.14) lib/action_view/renderer/abstract_renderer.rb:38:in `block in instrument'
activesupport (3.2.14) lib/active_support/notifications.rb:123:in `block in instrument'
activesupport (3.2.14) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (3.2.14) lib/active_support/notifications.rb:123:in `instrument'
actionpack (3.2.14) lib/action_view/renderer/abstract_renderer.rb:38:in `instrument'
答案 0 :(得分:6)
要支持group_by_day
,您需要捆绑来自Chartkick的同一作者的另一个gem:groupdate。
答案 1 :(得分:2)
我看不到group_by_day
方法的定义。这不是标准方法。可能是您引用group_by
。
在任何情况下,都没有为ActiveRecord类定义group_by
。它在array
上定义。
首先必须将记录提取到数组中。另外,如果created_at
是一种方法,则需要传递使用&amp;。
User.all.group_by(&:created_at)
另外,我不确定最后的.count
是否符合您的预期。它计算日期的组(如果是created_at,它将为每条记录返回几乎一个项目,因为created_at实际上很难重复)
答案 2 :(得分:0)
大概你需要这样的数据结构:
{ '2013-01-01' => 6, '2013-01-11' => 23, ... }
其中键是日期,值是该日期的注册数。
在我能找到的任何地方都没有group_by_day
方法。但是,您可以在数据库(它所属的位置)内轻松完成此操作:
counts = User.group('date(created_at)').count
或等效地:
counts = User.count(:group => 'date(created_at)')
这两个请求都会向数据库发送一个看起来或多或少的请求:
select count(*), date(created_at) from users group by date(created_at)
date(created_at)
在PostgreSQL和MySQL中应该是一样的,我不确定其他数据库。