我有一個模型A
其中has_many是我的B
模型(所以B模型引用A的外鍵a_id
)。 我想獲得所有未被任何B記錄引用的A記錄。使用活動記錄更有效的方法是哪種? 謝謝!有效記錄 - 獲取不存在關聯的記錄
0
A
回答
1
細節可能取決於你的數據庫,你創建的索引和數據存儲但我建議你給子查詢一試:
A.where.not(id: B.select(:a_id))
在PostgreSQL的,這將導致像單查詢:
SELECT * FROM as WHERE id NOT IN (SELECT a_id FROM bs)
3
由於導軌5的:
A.left_outer_joins(:bs).where(bs: { a_id: nil })
的在SQL的輸出爲:
SELECT "as".* FROM "as"
LEFT OUTER JOIN "bs" ON "bs"."a_id" = "a"."id"
WHERE "bs.a_id" IS NULL
+0
這裏的基準https://stackoverflow.com/a/45574301/2009803 – olimart
0
我在想你你的模型看起來像
class A < ApplicationRecord
has_may :bs
end
class B < ApplicationRecord
belongs_to :a
end
我想到你的schema.rb看起來像
create_table "as", force: :cascade do |t|
t.integer "id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "bs", force: :cascade do |t|
t.integer "id"
t.integer "a_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
,如果我有這那麼你應該可以做
A.where.not(id: B.select(:a_id))
相關問題
- 1. Rails - 獲取關聯記錄的數據
- 2. Rails的記錄不關聯
- 3. Rails/Active Record has_and_belongs_to_many關聯 - 獲取記錄
- 4. 獲取ms關聯記錄動態crm
- 5. 返回父記錄時有效獲取子記錄的計數
- 6. 獲取關聯記錄數量小於特定數量的所有記錄
- 7. 有效記錄根據子數據獲取父記錄
- 8. ActiveRecord的 - 獲取所有相關記錄
- 9. 使用關聯獲取所有相關記錄
- 10. 查找軌中沒有關聯記錄的記錄3
- 11. Sequelize:根據關聯的屬於多個記錄查找記錄 - 但仍然返回所有關聯的記錄?
- 12. 如何獲取所有關聯的記錄?
- 13. 獲取RoR 3中關聯的所有記錄
- 14. 從關係獲取所有記錄?
- 15. AcitveRecord不會爲具有嵌套現有記錄的新關聯記錄accept_nested_attributes_
- 16. 有關記錄
- 17. 獲取記錄
- 18. 查找記錄,即所有關聯記錄
- 19. 選擇所有記錄但排除關聯記錄
- 20. 查找沒有關聯的記錄
- 21. 刪除所有關聯的記錄
- 22. 刪除沒有關聯的記錄
- 23. 刪除記錄時記錄/捕獲的有效方法
- 24. 重構 - 查看是否存在記錄然後獲取記錄
- 25. 只有在記錄不存在的情況下插入記錄
- 26. 有效記錄。 Model.Find.last
- 27. ActiveRecord恢復關聯記錄
- 28. Rails排序關聯記錄
- 29. 軌關聯檢索記錄
- 30. 保存相關記錄而不先保存參考記錄
Th正是我所需要的!我們很快就會接受答案。謝謝 –
謝謝@RonanLopes!如果查詢結果太慢,請發佈更新,我很樂意幫助您調整它。 :-) –