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

实现此目的的最简单方法是进行两个查询,然后将它们连接在一个数组中。 –