如何形成一个活动记录查询,该查询将has_many关系的一组id与一组ID匹配?

时间:2015-03-03 15:38:21

标签: ruby-on-rails ruby activerecord

这是一个糟糕的标题,但我甚至提出这个问题的部分原因是因为我很难找到正确的词来搜索来回答这个问题。

基本上,我试图实现与GitHub相同的标签过滤系统,其中选择多个标签会找到包含所有选定标签的所有标记项目。例如,我们让用户的模型包含has_many:labels声明。

让我们说User" Bob"他的用户模型附有3个标签," One"," Two"和" Three"。然后,搜索用户的人选择标签" One"和"两个"。如何形成一个主动记录查询,基本上说"找到用户标签中包含一个和两个的所有用户"?显然,我需要能够向上扩展到任意数量标签的东西。

1 个答案:

答案 0 :(得分:0)

您希望使用从另一个表中获取的搜索参数搜索用户。因此,您需要使用连接扩展查询。我猜你想要搜索“' name'标签的参数。

User.joins(:labels).where(labels: {name: ["One", "Two"]})

会产生这个sql:

SELECT `users`.* FROM `users` INNER JOIN `labels` ON `labels`.`user_id` = `users`.`id` WHERE labels.name IN ("One", "Two")

如果您不能很好地管理索引,这可能会成为一个非常繁重的问题。正如已经指出的那样,你可能会受益于使用像act-as-taggable-on这样的宝石