Ruby on rails 遍历列名数组以传递给uniq.pluck()?

Ruby on rails 遍历列名数组以传递给uniq.pluck()?,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,我需要从多个列中提取唯一值,并编译每个唯一值的数组。使用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 reac

我需要从多个列中提取唯一值,并编译每个唯一值的数组。使用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
react=[]
字段=[反应性_1、反应性_2、反应性_3、反应性_4]
字段。每个do |字段|
放入“解析#{field}”
生的、所有的、唯一的、拔毛的(场)。每个都做|
除非包括在内?R
将“添加#{r}到数组。”

react您需要将列名设置为字符串或符号,就像这个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


你能描述一下你想要达到的目标吗?也许有一种更简单的方法可以从数据库中获取数据。

您也可以使用
%i[…]
来获取长符号列表,如
%[reactivity1 reactivity\u 2]
等。多谢!成功了。我正在尝试填充联接表。我收到了一份电子表格,其中列有反应性_1、反应性_2等,我需要拿出唯一的值来填充参考表,然后用反应性ID和项目ID填充联接表。因为您正在对获取调用
uniq
,所以不必检查本地数组是否包含该内容。它们已经是唯一的。每列中可能有重复的值。所以唯一的拔毛(:反应性_1)应该是人、鼠、鼠。唯一的选择是人类,黑猩猩。我想避免将人类推到数组中两次。如果这些是您的实际列名,听起来您违反了of。适当的关系结构在这里会有所帮助,因为记录
有很多:反应性
。在任何情况下,
react提供的数据集都违反了规范化。我试图做的是将一个平面的、不相关的数据集解析成一个关系结构。不幸的是,提供的数据是一团乱麻。希望修复它不会太痛苦,因为这听起来很糟糕。如果不处理大量数据,那么
flatte.uniq
方法非常简单。
require "set"
set = Set.new
set << "foo"
set << "bar"
set << "bar"
puts set.size #> 2