基于关联字段计数的范围

时间:2016-09-14 14:02:32

标签: ruby-on-rails rails-activerecord

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 }

1 个答案:

答案 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)) 
    }

    ...