2012-03-21 7 views
0

このタイトルは、私がしようとしていることをよく説明しているとは思えませんが、聞いてください。SQLite3 :: SQLException:あいまいな列名:id:SELECT DISTINCT id FROM "tickets"

だから私はticket has_many taskstask belongs_to accountを持っています。私はチケットタスクがアカウントに属しているチケットのリストを返すためにスコープとしてこれをしました:

scope :for_tasks_account, lambda { |account| joins(:tasks => :account).where("accounts.id = ?", account.id) } 

をしかし、チケットはアカウントが属する複数のタスクを持っているので、それは同じチケットの倍数を返すです。

アカウントが属するチケットの各タスクではなく、各チケットを1回だけ返すようにするにはどうすればよいですか?

ありがとうございます!

更新

私は、実際には2つのラムダに該当するものすべてに一覧表示するにはスコープに結合したい

scope :for_account, lambda { |account| joins(:group => :accounts).where("accounts.id = ?", account.id) } || lambda { |account| joins(:tasks => :account).where("accounts.id = ?", account.id) } 

これは可能ですか?最初の問題と同様に

アップデート2

私は、クエリの両方を組み合わせることを取得する方法を考え出したが、私はまだ返されたクエリで同じチケットの倍数を取得しています。

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 

感謝を入手します!

答えて

0

このシナリオでは「別個」を使用できるはずです。あいまいな列名:ID:INNERは "タスク" ON "タスク" を登録しよう "チケット" は異なるIDを選択し、 "TICKET_ID" = "チケット" "ID。私は` SQLite3の::のSQLExceptionを取得

ことで[OK]を
scope :for_tasks_account, lambda { |account| joins(:tasks => :account).where("accounts.id = ?", account.id).select('distinct accounts.id') } 
+0

"INNER JOIN"は "ON"のアカウントをアカウント "" id "="仕事 "" account_id "WHERE("チケット "、"アーカイブ "IS NULL)AND(accounts.id = 20)LIMIT 20 OFFSET 0' – Marc

+0

:for_tasks_account、lambda {| account | – heavysixer

+0

それを試してみても、どちらもうまくいきませんでした。(つまり、タスク=>:アカウント).where( "accounts.id =?"、account.id).select( 'distinct accounts.id') – Marc

関連する問題