我在模型ManytoMany
和User
之间建立了Tag
关联设置,假设我做了
users = User.all
这将为我提供所有用户,如果这些记录与ManyToMany
关联,我想过滤这些记录,例如tag_id
55
对于单个对象,我知道我可以执行users.first.tags.exists?(55)
这将给true
或false
机器人如何在包含100个记录的users
上执行此操作?
我的问题是
users
中删除不存在关系的记录?users
中有数百条记录,因此我需要以不影响性能的方式执行此操作。我将非常感谢您对此的任何反馈。
答案 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 } ).
它将为所有没有任何标签的用户提供。