2013-05-14 50 views
0

例如,我用Post模型和標籤模型獲得了簡單的應用程序。他們之間的關係如同許多人一樣。我需要找到與任何數量的標籤相關的帖子。 例如,我想查找所有貼有「Cat」和「Forest」標籤的帖子,但沒有標籤爲「Forest」或「Cat」的帖子。所以,只有貓在森林裏。Rails/SQL:找到哪個屬於全部,而不是任何

如何在Rails或原始SQL中運行這樣的查詢?如果我在使用操作上的相關模型,如

PostTag.where(tag_id: [1,2]) 

我會發布的任何該兩個標籤的,但我需要交集。我怎樣才能做到這一點?

回答

0

好一個刺是做類似如下:

post_tag_ids = PostTag.joins(:tags).where('tags.id = 1').pluck(:id) & PostTag.joins(:tags).where('tags.id = 2').pluck(:id) 
post_tags = PostTag.find(post_tag_ids) 

或更好,但

(PostTag.joins(:tags).where('tags.id = 1') & PostTag.joins(:tags).where('tags.id = 2')).uniq 

那麼,你是第一個發現後的post_tag IDS與標記1,然後標籤2,然後獲得兩組的交集,並查詢這些。

大多數情況下,人們試圖用鋼軌完成一個班輪任務,而最簡單的方法可能是在他們的鼻子下。但是,這會產生3個查詢,所以請牢記這一點。如果我要在sql中這樣做,那麼使用子查詢將是同樣的事情。

+0

是的,很明顯。我認爲可能會有更好的解決方案,而不是發射N個查詢。 –

+0

我剪掉了一個查詢,參見上文 – omarvelous

相關問題