0
對於初學者的問題感到抱歉。 我有資產和項目之間的關係。假設我循環直通我想找到沒有與該資產相關的所有項目的所有資產,但是這並不工作:查詢不存在的habtm記錄
Project.includes(:assets).where("assets.id != ?", asset.id)
什麼是正確的查詢?
對於初學者的問題感到抱歉。 我有資產和項目之間的關係。假設我循環直通我想找到沒有與該資產相關的所有項目的所有資產,但是這並不工作:查詢不存在的habtm記錄
Project.includes(:assets).where("assets.id != ?", asset.id)
什麼是正確的查詢?
如果你想找到與特定資產相關聯的所有項目,這樣的事情應該工作(這是未經測試,以便根據需要進行調整):
Project.joins(:assets_projects).where("assets_projects.asset_id != ?", asset_id)
asset_id
是你的資產實例的id
。
此外,您不應該通過資產循環查找與迭代當前資產相關的所有項目,這將意味着太多的數據庫調用(這就是所謂的N + 1問題 - 可以找到一個很好的解釋,例如here) 。要查找所有與任何資產無關的項目,只需執行一次查詢,請執行以下操作:
Project.find_by_sql(%(
SELECT * FROM projects
WHERE NOT EXISTS (SELECT * FROM assets_projects WHERE assets_projects.project_id = projects.id)
))
謝謝,但似乎沒有發現任何內容。我做了Project.find_by_sql([「SELECT * FROM projects WHERE NOT EXISTS(SELECT * FROM assets_projects WHERE assets_projects.asset_id!=?)」,asset.id])。任何線索? – zbigniew 2011-12-27 21:39:43
我根據你的問題的新版本編輯我的答案。希望它有幫助,並不要猶豫,如果它不問 – maprihoda 2011-12-28 09:17:23