我的应用程序需要销毁所有少于两个成员的团队.
这种方法似乎有效,但我希望如果可能的话,将其"擦除"到一行.
@consultancy.teams.reverse.each do |team|
team.destroy if team.users.count < 2
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试做更多类似下面的事情,但我收到了拒绝的错误!方法.
@consultancy.teams.reject!{|x| x.users.count < 2}
NoMethodError: undefined method `reject!' for #<Team::ActiveRecord_Associations_CollectionProxy:0x00000003f72850>
Run Code Online (Sandbox Code Playgroud)
.delete_all也会抛出错误.
@consultancy.teams.select{|x| x.users.count < 2}.delete_all
NoMethodError: undefined method `delete_all' for #<Array:0x0000000b72dcf0>
Run Code Online (Sandbox Code Playgroud)
提前感谢您的任何见解.
select作用于数组,但是delete_all是一个活动的记录关系方法.
你可以做到
@consultancy.teams.select{|x| x.users.count < 2}.map(&:delete)
Run Code Online (Sandbox Code Playgroud)
但更好的方法可能是将计数选择作为查询的一部分.
@consultancy.teams.joins(:users).group('teams.id').having('count(users.id) < 2').destroy_all
Run Code Online (Sandbox Code Playgroud)