Я использую очень базовую функцию анализа для моего приложения Rails. Я хочу предоставить статистику, которая сообщит пользователям, сколько посетителей просмотрели их профиль, а затем также разбить их в соответствии с конкретной ролью (я использую «ролик» в своем приложении) у каждого посетителя.Как уменьшить число похожих запросов
В шоу действии контроллера Users, я делаю это
@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 пытается обойтись без трех отдельных запросов, или это лучший способ (с точки зрения не ухудшающейся производительности) получить эти статистические данные.
Согласен, я бы определил некоторые области для этих запросов, но я бы не использовать их взглядов. Это просто сделает код более чистым. –
Спасибо за информацию. Не могли бы вы показать мне, как group_by может избежать второго и третьего звонков? Я понимаю, как это можно использовать в целом, но я не вижу, как это могло бы избежать вызовов. – BrainLikeADullPencil
Например, если вы хотите подсчитать виды для каждой роли, вы можете сделать что-то вроде: Profileviews.select («count (profileviews.id) как num_views, viewer_role as role»). Group ("role") – davidrac