我的模型有以下关系
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
方式来写这个。
答案 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