我有一個模型Note
誰has_and_belongs_to_many:
Tags
。導軌模型具有所有關聯
我想查找所有至少同時具有ID 1
和2
的標籤的Notes。
目前,我有這樣的:
這將返回有一個標籤使用任一ID 1
或2
所有Notes
。
我想返回任何包含兩個標籤的筆記。它可以不僅僅是這兩個標籤,但它至少必須同時具有這兩個標籤。
有什麼想法?我正在使用Rails 4.
我有一個模型Note
誰has_and_belongs_to_many:
Tags
。導軌模型具有所有關聯
我想查找所有至少同時具有ID 1
和2
的標籤的Notes。
目前,我有這樣的:
這將返回有一個標籤使用任一ID 1
或2
所有Notes
。
我想返回任何包含兩個標籤的筆記。它可以不僅僅是這兩個標籤,但它至少必須同時具有這兩個標籤。
有什麼想法?我正在使用Rails 4.
我從來沒有找到一個很好的解決方案。但是,如果您找不到合適的解決方案,我會分享我的解決方案。你可以像這樣做,
Note.includes(:tags).where(tags: { id: 1 }).references(:tags) && Note.includes(:tags).where(tags: { id: 2 }).references(:tags)
令人驚訝它的成本只是一個SQL查詢和它的作品。您可以編寫一個方法,根據您的數組創建一個鏈,然後使用eval
執行。
可以嘗試在您的調用中使用SQL語法嗎?
也許是這樣的:
Note.includes(:tags).where('EXISTS(SELECT 1 from tags where id = 1 and note_id = notes.id) and EXISTS(select 1 from tags where id = 2 and note_id = notes.id)').references(:tags).uniq
你可以連續使用2個何在
.where(tags: { id: 1 }).where(tags: { id: 2 })
你可以鏈上的兩個地方的標籤很容易。
Note.includes(:tags).where(tags: { id: 1 }).where(tags: { id: 2 }).references(:tags)