我有一组叫做消息的哈希:
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”
答案 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}
那是;提取产品编号数组,删除重复项。然后从该数组中选择多次出现在数组中的数字。