我的应用程序需要销毁成员少于两个的所有团队。
该方法似乎可行,但是我希望尽可能将其“精简”到一行。
@consultancy.teams.reverse.each do |team|
team.destroy if team.users.count < 2
end
我正在尝试做以下类似的事情,但是拒绝却出错了!方法。
@consultancy.teams.reject!{|x| x.users.count < 2}
NoMethodError: undefined method `reject!' for #<Team::ActiveRecord_Associations_CollectionProxy:0x00000003f72850>
.delete_all也引发错误。
@consultancy.teams.select{|x| x.users.count < 2}.delete_all
NoMethodError: undefined method `delete_all' for #<Array:0x0000000b72dcf0>
在此先感谢您的见解。
答案 0 :(得分:8)
select
作用于数组,但是delete_all
是活动记录关联方法。
你可以做
@consultancy.teams.select{|x| x.users.count < 2}.map(&:delete)
但是更好的方法可能是将计数选择作为查询的一部分。
@consultancy.teams.joins(:users).group('teams.id').having('count(users.id) < 2').destroy_all