このタイトルは、私がしようとしていることをよく説明しているとは思えませんが、聞いてください。SQLite3 :: SQLException:あいまいな列名:id:SELECT DISTINCT id FROM "tickets"
だから私はticket has_many tasks
とtask 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
感謝を入手します!
"INNER JOIN"は "ON"のアカウントをアカウント "" id "="仕事 "" account_id "WHERE("チケット "、"アーカイブ "IS NULL)AND(accounts.id = 20)LIMIT 20 OFFSET 0' – Marc
:for_tasks_account、lambda {| account | – heavysixer
それを試してみても、どちらもうまくいきませんでした。(つまり、タスク=>:アカウント).where( "accounts.id =?"、account.id).select( 'distinct accounts.id') – Marc