2016-11-30 85 views
0

我有在以下表格篩選表 - 活性記錄

  1. 用戶
  2. 標籤(1對多)

標籤可以應用於這兩個用戶和文章。 (用戶標籤是將標籤列入黑名單 - 即不顯示用用戶提交的標籤標記的文章)。因此他們有下面列

  1. ID
  2. taggable_type( '文章' 或 '用戶')
  3. 標題(字符串)
  4. 加標籤的ID(相關文章ID或用戶ID)

當用戶執行獲取請求時,我希望使用提供的用戶列入黑名單的標籤將activerecord過濾掉所有文章。

我執行以下操作以獲取用戶列入黑名單標籤

if user != nil 
    user_tags = user.tags 
    blacklisted_tags = [] 
    user_tags.each do |user| 
    blacklisted_tags.push(user.title) 
    end 
    puts "\n \n \n user tags - #{blacklisted_tags} \n \n \n" 
end 

blacklisted_tags = ['foo','bar'] 

陣列我不能似乎得到的ActiveRecord正確過濾掉標記任何的blacklisted_tags的任何物品。

這是我到目前爲止已經完成

negations[:tags] = "tags.title not in #{blacklisted_tags}" 

@articles = Article.order(followed).left_outer_joins(:tags).where.not(negations) 

我得到下面的SQL錯誤 -

(Mysql2::Error: Unknown column 'articles.taggable_id' in 'where clause': SELECT `articles`.* FROM `articles` LEFT OUTER JOIN `tags` ON `tags`.`taggable_id` = `articles`.`id` AND `tags`.`taggable_type` = 'article' WHERE (`articles`.`taggable_id` != 'tags.title not in [\"foo\", \"bar\"]') 

哪裏是鐵軌從獲得 'articles.taggable_id'?

有沒有更好的方法來解決這個問題?

回答

1

試試看:

@articles = Article.joins(:tags).where.not(tags: { title: blacklisted_tags}) 
+0

出於某種原因..這似乎只能說明我不想顯示行.. – Kannaj

+0

然後嘗試消極條件 –