我想在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}
)
感谢您的帮助!
答案 0 :(得分:3)
是的,将多个列名称传递给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
压扁后。
答案 1 :(得分:0)
records = []
Model.all.map {|e| records << [e.A, e.B] }
uniq_records = records.flatten.uniq
希望这会对你有所帮助。
由于