Я действительно не думаю, что название этого хорошо объясняет то, что я пытаюсь сделать, но я даже не знаю, как спросить.
Так что у меня есть ticket has_many tasks
и task belongs_to account
,Я имею это в качестве области для возврата списка билетов, где задача билетов принадлежит учетной записи:
scope :for_tasks_account, lambda { |account| joins(:tasks => :account ).where("accounts.id = ?", account.id) }
, но она возвращает несколько одинаковых билетов, потому что билет имеет несколько задач, к которым принадлежит учетная запись.
Как я могу заставить его возвращать каждый тикет только один раз, а не для каждого задания в этом тикете, к которому относится учетная запись?
Спасибо!
Обновление
Я бы на самом деле хотел объединить в области видимости все, что относится к двум лямбдам:
scope :for_account, lambda { |account| joins(:group => :accounts ).where("accounts.id = ?", account.id) } || lambda { |account| joins(:tasks => :account ).where("accounts.id = ?", account.id) }
Возможно ли это?А также первая проблема.
Обновление 2
Я выяснил, как объединить оба запроса, но я все еще получаю несколько одинаковых заявок в возвращенномquery.
scope :for_group_with_account, lambda { |account| joins(:group => :accounts ).where("accounts.id = ?", account.id) }
scope :for_task_with_account, lambda { |account| joins(:tasks => :account ).where("accounts.id = ?", account.id) }
scope :for_account, lambda { |account| for_group_with_account(account) & for_task_with_account(account).select('DISTINCT id') }
Я использую DISTICNT
, но я все еще получаю
SQLite3::SQLException: ambiguous column name: id: SELECT DISTINCT id FROM "tickets" INNER JOIN "groups" ON "groups"."id" = "tickets"."group_id" INNER JOIN "assignments" ON "groups"."id" = "assignments"."group_id" INNER JOIN "accounts" ON "accounts"."id" = "assignments"."account_id" INNER JOIN "tasks" ON "tasks"."ticket_id" = "tickets"."id" INNER JOIN "accounts" "accounts_tasks" ON "accounts_tasks"."id" = "tasks"."account_id" WHERE ("tickets"."archived" IS NULL) AND (accounts.id = 20) LIMIT 20 OFFSET 0
Еще раз спасибо!