rails - 查找具有重复属性的对象

时间:2015-07-22 17:49:50

标签: ruby-on-rails ruby activerecord

如果我有一个对象数组Foo,我怎样才能找到并返回具有特定属性重复值的对象?例如,我想返回对Foo.xFoo.y

都有重复值的对象

我正在使用rails 3.2和ruby 1.9

我正在寻找类似的东西:

one = Foo.create!(:x => 1, :y => 2, :z => 3)
two = Foo.create!(:x => 1, :y => 2, :z => 6)
three = Foo.create!(:x => 4, :y => 2, :z => 3)

arr = [one, two, three]

arr.return_duplicates_for_columns(Foo.x, Foo.y) = [one, two]

2 个答案:

答案 0 :(得分:3)

我认为最简单的解决方案是使用ActiveRecord中的where方法。使用Foo.where()返回一个对象数组,其中每个对象都匹配提供的所有条件。

对于你的问题,我会写一些类似于以下例子的内容:

similar_attributes = Foo.where(x: 1, y: 2)
# => similar_attributes = [#<Foo:0x000>, #<Foo:0x001>]
# Arbitrary Foo object labels

similar_attributes.include?(one)
# => true

similar_attributes.include?(two)
# => true

similar_attributes.include?(three)
# => false

Foo.where(x: 1, y: 2).include?(one)
# => true

答案 1 :(得分:2)

我不确定我是否喜欢这个解决方案或它对您有多好,但它应该有效。

foos = Foo.some_ar_query_that_returns_some_foos
grouped_foos = foo.group_by {|f| [f.x, f.y]}

grouped_foos现在将是一个哈希值。键将是x和y值的数组。值将是具有相同值的Foo实例数组。值的大小多于一的散列的任何元素都有重复。