我想通過標記進行搜索,所以我需要一個exists
查詢,但我仍然需要在所有標記上加入連接。我嘗試了幾種方法,並且我沒有想法。Rails ActiveRecord在指定範圍內通過標記查找問題
的Qustion - 標籤關係是通過has_and_belongs_to_many
兩種方式(即我有一個QuestionTags木匠表)
例如
Question.join(:tags).where('tag.name = ?', tag_name).includes(:tags)
我希望它可以做什麼,我需要的,但實際上它只是搗爛了includes
與join
和我剛剛結束了與基本內連接。
Question.includes(:tags)
.where("exists (
select 1 from questions_tags
where question_id = questions.id
and tag_id = (select id
from tags
where tags.name = ?))", tag_name)
此獲取正確的結果,但一)實在是太醜了,和b)給出了一個折舊的警告,又似乎混淆includes
與join
:
棄用警告:看起來你是在字符串SQL sn ippet中引用的熱切加載表(一個 :questions,tags)。對於 例如:
Post.includes(:comments).where("comments.title = 'foo'")
注意我試圖寫這些的命名範圍。
讓我知道如果問題不明確。提前致謝。
說實話,我很困惑,爲什麼內部聯接是不是你不夠好,你能請到更詳細爲什麼加入標籤工作不適合你? –
@EdgarsJekabsons,因爲我需要顯示所有帶有特定標籤的問題列表,但在該列表中仍需要顯示每個問題的所有標籤,避免N + 1查找。例如。點擊上面的'sql'標籤來查看我需要的SO頁面。只有內部連接,頁面將只顯示每個問題下的'sql'標籤。 – fearofawhackplanet