我正在爲我的Rails應用程序做出非常基本的分析功能。我想提供統計數據,告訴用戶有多少訪問者查看了他們的個人資料,然後根據每個訪問者的具體角色(我在我的應用中使用「rolify」)將其分解。如何減少類似查詢的數量
在用戶控制器的表演動作,我這樣做
@profileviews = Profileview.where(:user_id => @user.id)
@profileviewsbysomerole = Profileview.where({:user_id => @user.id, :viewer_role => 'someRole'})
@profileviewsbysomeotherrole = Profileview.where({:user_id => @user.id, :viewer_role => 'someOtherRole'})
,然後在表演的動作,我會做
Your profile has been viewed <%= @profileviews.size %> times.
Your profile has been viewed by users with a particular role <%= @profileviewsbysomerole.size %> times.
Your profile has been viewed by users with some other role <%= @profileviewsbysomeotherrole.size %> times.
有沒有辦法來完成我」 m試圖不做三個單獨的查詢,或者這是獲得這些統計數據的最佳方式(不降低性能)。
同意,我會定義這些查詢一些範圍,但我不會從視圖中使用它們。它只是使代碼看起來更清潔 – 2013-05-01 21:00:32
感謝您的信息。您介意告訴我group_by如何避免第二次和第三次電話?我明白它是如何被普遍使用的,但我不明白它是如何避免這種呼叫的。 – BrainLikeADullPencil 2013-05-01 21:31:11
例如,如果要計算每個角色的視圖,可以執行以下操作:Profileviews.select(「count(profileviews.id)as num_views,viewer_role as role」)。group(「role」) – davidrac 2013-05-02 04:22:36