Ruby检查集合中是否至少有一个元素符合条件

时间:2016-09-21 14:42:35

标签: ruby ruby-on-rails-4

我的模型有以下关系

class User < ActiveRecord::Base
  has_many :controllers
end

class Controller < ActiveRecord::Base
  belongs_to :user
end

Controller有一个名为is_active的布尔值。

如果属于特定用户对象的所有控制器对象都为is_active false,我想引发异常。

不幸的是,我很难将这句话放入代码中。

# if for all controllers is_active false is met, raise exception
# ~>  need to find one controller which is active
array = []
User.find(id).controllers.each do |c|
   array << c.is_active
end
unless array.include?('true') 
 raise ...
end

感觉有更多rubisch方式来写这个。

4 个答案:

答案 0 :(得分:4)

如果is_active是您想写的数据库列:

Controller.exists?(user_id: id, is_active: true)

如果需要计算:

User.find(id).controllers.any?(&:is_active)

答案 1 :(得分:2)

user.controllers.any?(&:is_active)

将是这里的最佳选择。

答案 2 :(得分:0)

尝试rails方式

unless User.find(id).controllers.where(is_active: true).any?
  #your code
end

答案 3 :(得分:0)

User.joins(:controllers).where(id: id, controller: {is_active: true}).count > 0