SQLite3 :: SQLException: неоднозначное имя столбца: id: ВЫБЕРИТЕ DISTINCT id ИЗ «билетов» - PullRequest
0 голосов
/ 21 марта 2012

Я действительно не думаю, что название этого хорошо объясняет то, что я пытаюсь сделать, но я даже не знаю, как спросить.

Так что у меня есть 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

Еще раз спасибо!

1 Ответ

0 голосов
/ 21 марта 2012

Я думаю, что вы должны быть в состоянии использовать "разные" в этом сценарии.

scope :for_tasks_account, lambda { |account| joins(:tasks => :account ).where("accounts.id = ?", account.id).select('distinct accounts.id') }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...