2016-09-21 18 views
0

を満たしているかどうかを確認私のモデルは、以下の関係ルビーコレクションから少なくとも一つの要素が条件

class User < ActiveRecord::Base 
    has_many :controllers 
end 

class Controller < ActiveRecord::Base 
    belongs_to :user 
end 

Controllerを持っているがis_activeと呼ばれるブール値を持っています。

特定のユーザーオブジェクトに属するすべてのコントローラーオブジェクトがis_activeである場合、例外を発生させたいと思います。

残念ながら、私はこの文章をコードに入れるのに苦労しています。

# 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はあなたが書きたいと思うかもしれないよりデータベース列の場合:

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
:ISを計算する必要がある場合

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

は、

user.controllers.any?(&:is_active) 
ここでは

が最適です。

関連する問題