Ruby on rails 属性必须唯一的两个对象数组的并集-ruby

Ruby on rails 属性必须唯一的两个对象数组的并集-ruby,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有两种activerecord型号: class M1< ActiveRecord::Base end class M2< ActiveRecord::Base end 现在我想以这样或那样的方式把他们结合起来 所以我做的很简单: m_all=m1s + m2s 所以我得到了一组对象: [#<M1:0x007fffdcc14100 date: Fri, 15 Sep 2017, name: "name1", inf

我有两种activerecord型号:

 class M1< ActiveRecord::Base

 end

 class M2< ActiveRecord::Base

 end
现在我想以这样或那样的方式把他们结合起来

所以我做的很简单:

m_all=m1s + m2s
所以我得到了一组对象:

    [#<M1:0x007fffdcc14100
      date: Fri, 15 Sep 2017,
      name: "name1",
      info: "blablablabla">,

     #<M2:0x007fffdd492e08
      date: Fri, 15 Sep 2017,
      name: "name2",
      info: "blabla"> ...
   ]
它应该只选择前两个,因为第二个和第三个具有相同的日期和名称

那我该怎么办? 我试着这样做,但没有成功:

m_all= m_all.uniq do |m|
   [m[:date], m[:name]]
end

如果我正确理解您的要求,您需要使用:

例如:

样品O/p

注意:我试着在评论中提出这个问题,但是,因为它不可读,所以我把它作为答案发布了出来

编辑

如果您需要带钥匙的信息,请使用

样品O/p


我在我所在的一个示例数据库上试用了它,uniq代码运行良好。您绝对确定日期是一个日期字段吗?如果是datetime字段,您可能会发现匹配失败

试着只在年-月-日进行匹配,我也会建议进行约会,但我偶尔会遇到一些问题

m_all= m_all.uniq do |m|
   [m[:date].to_datetime.strftime('%Y%m%d'), m[:name]]
end

那应该有用的。您得到了什么错误或结果?@user2950593如果我正确理解了您的目标,您需要做的就是放置m_All=m_All.uniq?@SteveTurczyn结果是前后具有相同数量元素的相同数组
m_all= m_all.uniq do |m|
   [m[:date], m[:name]]
end
m1s = M1.where(...).pluck(:date, :name, :info)
m2s = M2.where(...).pluck(:date, :name, :info)

m_all = (m1s + m2s).uniq
[["11.04.15", "xxx", ""], ["11.04.15", "yyy", ""]]
m1s = M1.where(...).select(:date, :name, :info).as_json
m2s = M2.where(...).select(:date, :name, :info).as_json

m_all = (m1s + m2s).uniq
[{date: "11.04.15", name: "xxx", info: ""},
 {date: "11.04.15", name: "yyy", info: ""}]
m_all= m_all.uniq do |m|
   [m[:date].to_datetime.strftime('%Y%m%d'), m[:name]]
end