Ruby on rails 如何查询rails中分组对象的数组类?

Ruby on rails 如何查询rails中分组对象的数组类?,ruby-on-rails,postgresql,activerecord,rails-activerecord,Ruby On Rails,Postgresql,Activerecord,Rails Activerecord,我有一个sites表和credits表。他们的联系如下: # site.rb has_many :credits # credit.rb belongs_to :site 我已经按站点分组了积分,只想获得该站点的积分,其金额大于0 例如: Credits.all.group_by(&:site_id) # This will group credits by site # {1=> #<Credit: id: 12017, amount: -0.1e2, 2=> #

我有一个
sites
表和
credits
表。他们的联系如下:

# site.rb
has_many :credits

# credit.rb
belongs_to :site
我已经按站点分组了积分,只想获得该站点的积分,其金额大于0

例如:

Credits.all.group_by(&:site_id) # This will group credits by site
# {1=> #<Credit: id: 12017, amount: -0.1e2, 2=> #<Credit: id: 123, amount: 12>}
Credits.all.group_by(&:site_id)#这将按站点对信用进行分组
# {1=> # #}
我尝试使用reject,但它将通过错误未定义的数组方法:

Credits.all.group_by(&:site_id).reject{|k,v| v.amount < 0}
# {2=> #<Credit: id: 123, amount: 12>}
Credits.all.group_by(&:site_id)。拒绝{k,v|v.amount<0}
# {2=> #}

我建议使用group而不是group\u;好处是您将使用SQL进行分组和筛选,这比您现在所做的要快得多(groupby将使Rails获取整个集合,然后使用ruby函数进行分组和筛选)

像这样的

Credit.group(:site_id).having('amount > 0')
但您必须更改代码,因为这不会返回哈希,而是返回ActiveRecord实例的集合

但是如果你还想用group_来代替

Credits.all.group_by(&:site_id).filter{k,v|v.amount<0}
Credits.all.group_by(&:site_id).filter{|k,v| v.amount < 0}