迭代列名称数组传递给uniq.pluck()?

时间:2018-03-13 22:15:52

标签: 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 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

1 个答案:

答案 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

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