我有两个型号
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?)?
感谢。
答案 0 :(得分:1)
不确定但是以下工作
Item.joins(:users).group('items.id').having('COUNT(items_users.user_id) = 2').destroy_all
答案 1 :(得分:0)
使用group
和having
来过滤条件。
Item.joins(:users)
.group('COUNT(users.id)')
.having('COUNT(users.id) = ?', 2)
.select('COUNT(users.id) AS users_count')
.destroy_all