【发布时间】:2016-11-30 06:33:39
【问题描述】:
我有下表
- 用户
- 文章
- 标签(一对多)
标签可以同时应用于用户和文章。 (用户标签是要被列入黑名单的标签 - 即不显示带有用户提交标签的文章)。因此,他们有以下几列
- 身份证
- taggable_type(“文章”或“用户”)
- 标题(字符串)
- 可标记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\"]')
rails 从哪里获取“articles.taggable_id”?
有没有更好的方法来解决这个问题?
【问题讨论】:
标签: mysql ruby-on-rails activerecord