2016-09-14 6 views
-3
class User < ActiveRecord::Base 
    has_many :portfolios 
end 

class Portfolio < ActiveRecord::Base 
    belongs_to :user 
end 

各ポートフォリオには、フルまたは空であるかどうかを判断するブール値フィールドがあります。アソシエーションのフィールド数に基づくスコープ

アクティブなレコードの関係として、フルポートと空のポートフォリオの数に基づいてユーザーをスコープする方法を教えてください。 selectを使用して

例は、(配列を返す):

User.select { |user| user.portfolios(full: true).count > 1 && 
        user.portfolios(full: false).count == 1 } 
+0

私はdownvoteの理由を教えてもらえますか? –

+0

ポートフォリオが満杯か空であるかをどうやって決めるのですか? –

+0

任意のフィールドまたは値のあるフィールドの数を決定していますか? –

答えて

0

私はあなたがポートフォリオの指定回数を持つユーザーを選択したい理解しています。すなわち、2つのポートフォリオを有するすべてのユーザを選択する。だから、この場合は次のようなものを使用することができます:

class User < ActiveRecord::Base 

    ... 

    scope :with_protfolio_count, -> (count) { 
     where(id: Portfolio.having('count(1) = ?', count).group(:user_id).select(:user_id)) 
    } 

    ... 
+0

はい、これに似ていますが、あなたはポートフォリオプロパティのカウントもベースにする例がありますか? 1つ以上の完全なポートフォリオを持つすべてのユーザーを空にしたいとします(質問にselectを付けた例を追加しました)。 –

+0

これを達成する最も簡単な方法は、2つのクエリを作成して1つの配列に結合することです。 –

関連する問題