Rails - 如果结果与关联匹配,则过滤结果

时间:2017-07-17 09:06:55

标签: ruby-on-rails

我在模型ManytoManyUser之间建立了Tag关联设置,假设我做了

users = User.all

这将为我提供所有用户,如果这些记录与ManyToMany关联,我想过滤这些记录,例如tag_id 55

对于单个对象,我知道我可以执行users.first.tags.exists?(55)这将给truefalse机器人如何在包含100个记录的users上执行此操作? 我的问题是

  1. 使用循环是实现此目的的唯一方法吗?
  2. 如何从users中删除不存在关系的记录?
  3. 我在users中有数百条记录,因此我需要以不影响性能的方式执行此操作。
  4. 我将非常感谢您对此的任何反馈。

1 个答案:

答案 0 :(得分:1)

您可以通过这种方式访问​​用户的标签ID 55

@user = User.joins(:tags).where("tags.id = ?" ,55)

OR

@user = User.includes(:tags).where(tags: {id: 55})

您也可以这种方式过滤多个标签ID

tags_id = [55,56,57,58,59]
@user = User.joins(:tags).where("tags.id IN = (?)" ,tags_id)

您可以使用此查询找到关联是否存在

User.includes(:tags).where( :tags => { :id => nil } ).

它将为所有没有任何标签的用户提供。

相关问题