2016-11-30 86 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

然后尝试消极条件 –