Многостоловый запрос в Rails - PullRequest
1 голос
/ 04 мая 2011

Я сделал простые поиски Rails для двух таблиц, но теперь обнаружил, что с запросом 4 таблиц я не добился хорошего прогресса.Все таблицы связаны с ключами и в основном:

  • Пользователь (имеет много)
  • Телефоны (имеет много)
  • Кампании (имеет много)
  • Звонки

Я просто хочу подсчитать общее количество звонков конкретного пользователя и общее количество звонков для конкретной кампании.Я мог бы также добавить идентификатор пользователя в Campaigns and Calls, но по какой-то причине я считаю это обманом или плохой идеей.Я просто не знаю.

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Рельсы 3:

Общее количество звонков, совершенных конкретным пользователем:

@user.phones.joins(:campaigns => :calls).count

Общее количество звонков для конкретной кампании:

@user.phones.joins(:campaigns => :calls).where('campaigns.id' => @campaign.id).count
0 голосов
/ 04 мая 2011

Предполагая, что телефон принадлежит пользователю, а кампания принадлежит телефону:

# total calls for a specific campaign
campaign_call_count = Campaign.find(id).calls.count
# or a report for all campaings
Campaign.all.map{|c| "#{c.name}: #{c.calls.count}"

#total calls a user has
user_phone_ids = user.phones.map(&:id)
user_calls_by_campaign = Campaign.where(:phone_id=>user_phone_ids).map{|campaign| "#{user.name} calls for #{campaign.name}: #{campaign.calls.count}" }
puts user_calls_by_campaign

Это должно дать вам список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...