2015-10-31 76 views
0

假設我有postscategorizations用至少一個不符合給定條件的關聯過濾掉記錄

Post(id)

Categorization(post_id, topic_id)

我想獲取不屬於一個特定的主題ID的帖子。

在我的情況下,我必須在加入Post到Categorizations時使用內連接,因爲我有其他要執行的過濾器。

我該如何解決這個問題?

我曾嘗試以下:

Post.joins(:categorizations).where("categorizations.topic_id != ?", doomed_topic_id)

但這返回仍然有其他主題的帖子。它只適用於只有一個單一主題的帖子,而這恰恰是不需要的主題。

例如,如果我有一個包含2個類別(註定的topic_id和另一個主題)的帖子,則此查詢將失敗並實際獲取它,而不是將其過濾掉。

回答

0

嘗試:

Posts.where('not exists 
       (select * from categorizations 
        where post_id = posts.id and 
         topic_id = ?)', doomed_id) 
+0

你是一個生命的救星森!謝謝一堆 –

相關問題