Мой текущий запрос ActiveRecord выглядит следующим образом:
team_query = <<-TEAMQUERY
( ( tasks.taskable_type = 'Account'
AND tasks.taskable_id IN (SELECT id
FROM accounts
WHERE accounts.team_id = :team_id) )
OR ( tasks.taskable_type = 'Business'
AND tasks.taskable_id IN (SELECT id
FROM businesses
WHERE businesses.team_id = :team_id) )
OR ( tasks.taskable_type = 'Team'
AND tasks.taskable_id = :team_id ) )
TEAMQUERY
Task.where(team_query, team_id: team_id).count
В основном мне требуется идентификатор группы, но я также использую его для проверки учетных записей / предприятий.
Я пытаюсь переписать с AREL, но в настоящее время не выдает правильный вывод
t = Task.arel_table
team_query = t[:taskable_type].eq('Team').and(t[:taskable_id].eq(team_id))
a = Account.arel_table
account_query = t[:taskable_type].eq('Account').and(t[:taskable_id].in(a.project(a[:id]).where(a[:team_id].eq(team_id))))
b = Business.arel_table
business_query = t[:taskable_type].eq('Business').and(t[:taskable_id].in(b.project(b[:id]).where(b[:team_id].eq(team_id))))
Task.where(team_query.or(account_query).or(business_query)).count