我正在为我的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