在我的rails應用程序中,項目通過賦值分配給用戶。現在我想爲特定用戶檢索未分配的項目。 SQL查詢:Rails 4/Ruby2/PG9.3:ActiveRecord在SQL子查詢中混淆表
SELECT * FROM projects WHERE id NOT IN (SELECT project_id FROM assignments WHERE user_id = 1
列出了所有在pgAdmin的進入時未分配項目用戶1。
這裏是我的Rails代碼:
class User < ActiveRecord::Base
has_many :assignments, dependent: :destroy
has_many :assigned_projects, through: :assignments, source: :project
has_many :unassigned_projects, :class_name => 'Project', :finder_sql => proc {
["SELECT * FROM projects WHERE id NOT IN (SELECT project_id FROM assignments WHERE user_id = ?)", self.id]
}
這就提出:
ActiveRecord::StatementInvalid - PG::Error: ERROR: column projects.user_id does not exist LINE 1: SELECT 1 AS one FROM "projects" WHERE "projects"."user_id" = $1
這並不奇怪,因爲正確的列是 「assignments.user_id」。顯然,rails不尊重第二個FROM。我的代碼有什麼問題?
更新: 檢查了「unassigned_projects」 -CollectionProxy顯示,它包含究竟什麼是應該遏制。所以它似乎是第一次正確組裝。然而,後來PG引發錯誤,當調用:
if @unassigned_projects.any?
但如果調用:
if @assigned_projects.any?
謝謝你。你的回答可能指向正確的方向。我相應地更改了查詢,但仍然收到相同的錯誤消息。關於拼寫:我不是母語爲英語的人,拼錯「任務」;-)。當然,這個表格是名稱「項目」。失蹤的「s」只是一個錯字。我編輯我的帖子來解決這個問題。 – AWM