2016-09-21 65 views
0

我的模型有如下關係紅寶石檢查從收集至少一個元素符合條件

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

如果is_active是數據庫列可能比你想要寫:

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

如果需要計算:

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

試軌方式

unless User.find(id).controllers.where(is_active: true).any? 
    #your code 
end 
0
User.joins(:controllers).where(id: id, controller: {is_active: true}).count > 0 
2
user.controllers.any?(&:is_active) 

將是這裏最好的選擇。