2013-11-04 63 views
2

我想使用戶註冊等的(每天)使用chartkick,它是一個簡單的一行代碼的數量的線圖,但它是給一個錯誤未定義的方法`group_by_day」 - 軌道3.2

`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' 

回答

5

如果要支持group_by_day,您需要捆綁另一個gem:groupdate來自同一作者的Chartkick。

+0

非常感謝,我檢查了寶石,這是我失蹤。 – ben

+0

但有一些我不明白,爲什麼不能從另一個表訪問屬性。例如:<%= pie_chart User.city.group(「name」)。count%>,從此我想訪問用戶的城市名稱。不工作,我在這裏做錯了什麼? – ben

+1

@ben我認爲你的意思是計算每個城市的用戶數量,可能你可以嘗試'User.includes(:city).group(「city.name」)。count' – Mifeng

2

我看不到group_by_day方法的定義。這不是一種標準方法。可能你是參考group_by

在任何情況下,group_by都沒有爲ActiveRecord類定義。它在array上定義。

您首先必須將記錄提取到數組中。另外,如果created_at是一種方法,則需要通過使用&。

User.all.group_by(&:created_at) 

此外,我不確定最後的.count表現如您所料。它的票的日期組(和created_at的情況下,它會返回幾乎每一件記錄,因爲created_at真的很難複製)

+0

你是對的,我來自一個評論我的問題,我沒有注意到錯誤的方法名稱。 http://stackoverflow.com/questions/4987392/how-do-i-group-by-day-instead-of-date/4987487我更新了答案。 –

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一樣,我不知道其他數據庫。

相關問題