Rails Arel с несколькими подзапросами OR - PullRequest
0 голосов
/ 21 декабря 2018

Мой текущий запрос 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
...