我需要多列来从中提取唯一值并编译每个唯一值的数组。使用uniq.pluck(:column_name)可以工作,但是如何迭代列名数组呢?
react = []
fields = [reactivity_1, reactivity_2, reactivity_3, reactivity_4]
fields.each do |field|
puts "Parsing #{field}"
Raw.all.uniq.pluck(field).each do |r|
unless react.include? r
puts "Adding #{r} to Array."
react << r
else
puts "#{r} Exists."
end
end
end
Error:
NameError: undefined local variable or method `reactivity_1' for main:Object
答案 0 :(得分:1)
您需要使列名称为字符串或符号,例如Ruby认为它是本地变量或方法。
react = Set.new
fields = [:reactivity_1, :reactivity_2, :reactivity_3, :reactivity_4]
fields.each do |field|
puts "Parsing #{field}"
Raw.all.uniq.pluck(field).each do |r|
react << r
end
end
如果您想确保某个集合不包含重复内容,可以使用Set
:
require "set"
set = Set.new
set << "foo"
set << "bar"
set << "bar"
puts set.size #> 2
我已重写您的代码示例以使用Set
。
你能描述一下你想要达到的目标吗?也许有一种更简单的方法可以从数据库中获取数据。