如何在Ruby中找到具有给定数量的相关对象的实例?

时间:2011-10-27 07:49:21

标签: ruby arrays activerecord hash

我有一组叫做消息的哈希:

messages = [{ "id" => "1", "name" => "John", "content" => "xxxxx", "product" => "1" },
 { "id" => "2", "name" => "John", "content" => "yyyyy", "product" => "3" },
 { "id" => "3", "name" => "Paul", "content" => "zzzzzz", "product" => "3" },
 { "id" => "4", "name" => "George", "content" => "xxyyzz", "product" => "2" }]

消息属于产品:

class Message < ActiveRecord::Base   
  belongs_to :product
end

如何找到包含指定数量邮件的产品?例如查找带有消息的产品&gt; 1将给出产品“3”

2 个答案:

答案 0 :(得分:2)

按产品对邮件进行分组,并选择包含多条邮件的产品。

messages.group_by(|m| m['product']).select{|p, mList| mList.length() > 1}.keys()

如果要从DB检索Product实例,请使用ActiveRecord方法:

Product.joins(:messages).group("id").having("count(*) > 1")

答案 1 :(得分:0)

我最初的想法如下:

prod_ids = messages.map{|m| m["product"]}.uniq
prod_ids.select {|prod| prod_ids.count(prod) > 1}

那是;提取产品编号数组,删除重复项。然后从该数组中选择多次出现在数组中的数字。