2016-09-14 107 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

是的,與此類似的是,您是否有一個例子,您可以將計數基於投資組合屬性?假設我想要所有擁有多個完整投資組合並且只有一個空的用戶(在問題中增加了一個select) –

+0

實現此目的的最簡單方法是進行兩個查詢,然後將它們連接在一個數組中。 –