我想在 Rails 中创建一个数组,其中包含两列的每一个值,但每列只有一次。因此,例如,在“A”{1,5,7,1,7}
列和“B”列中有{3,2,3,1,4}
。
当我只想要一个包含“A”所有元素的数组时,我会写:
Model.uniq.pluck(:A)
我会得到{1,5,7}
。
Rails 中是否有一个选项可以用两列做同样的事情,所以只需一次获取包含在两列中的所有值?(这里是{1,5,7,3,2,4}
)
感谢帮助!
我想在 Rails 中创建一个数组,其中包含两列的每一个值,但每列只有一次。因此,例如,在“A”{1,5,7,1,7}
列和“B”列中有{3,2,3,1,4}
。
当我只想要一个包含“A”所有元素的数组时,我会写:
Model.uniq.pluck(:A)
我会得到{1,5,7}
。
Rails 中是否有一个选项可以用两列做同样的事情,所以只需一次获取包含在两列中的所有值?(这里是{1,5,7,3,2,4}
)
感谢帮助!
是的,将多个列名传递给pluck
:
Model.pluck(:A, :B)
#=> [[1, 3], [5, 2], [7, 3], [1, 1], [7, 4]]
但是当然你希望这些值在一起并且是唯一的:
Model.pluck(:A, :B).flatten.uniq
#=> [1, 3, 5, 2, 7, 4]
这样做Model.uniq.pluck(:A, :B).flatten
是行不通的,因为它只会得到不同的行(即 A 和 B 的组合),所以你仍然需要uniq
在展平后再次这样做。
records = []
Model.all.map {|e| records << [e.A, e.B] }
uniq_records = records.flatten.uniq
希望这会对你有所帮助。
谢谢