Rails ActiveRecord:找到具有HABTM(has_and_belongs_to_many)关系的相关模型COUNT

时间:2018-02-05 02:13:28

标签: sql ruby-on-rails ruby activerecord

我有两个型号

class Items < ApplicationRecord
  has_and_belongs_to_many :users
end

class Users < ApplicationRecord
  has_and_belongs_to_many :items
end

我想找出有2个用户关联的所有项目,并删除它们。

我可以想到使用迭代方法来做这件事:

Item.all.each do |i|
  if i.users.all.count == 2
    i.delete
  end
end

使用 ActiveRecord ORM,是否有更优雅的方式(oneliner?)?

感谢。

2 个答案:

答案 0 :(得分:1)

不确定但是以下工作

Item.joins(:users).group('items.id').having('COUNT(items_users.user_id) = 2').destroy_all

答案 1 :(得分:0)

使用grouphaving来过滤条件。

Item.joins(:users)
    .group('COUNT(users.id)')
    .having('COUNT(users.id) = ?', 2)
    .select('COUNT(users.id) AS users_count')
    .destroy_all