Rails : 获取单个记录的多个列值

Rails : Get multiple column values for single record

我想获取单个记录的多列(希望是数组)的 values。我有 column names 作为字符串数组。

类似于:

Model.first.select([:id,:name,:col1,:col2]).values
#=> [1,mrudul,col1_val,col2_val]  

# with column_names as array
# Model.first.select(columns_names.map(&:to_sym)).values  

问题是我将列名称作为字符串数组。我怎样才能做到这一点?

我认为这可行

column_names = ['id','name']

Model.where(id: 123).pluck(column_names.join(','))

或使用 select

Model.select(column_names.join(',')).where(id: 123)

Model.select(column_names.join(',')).first

您可以反转地图并在您的列列表中使用它:

model = Model.first
["id", "name", "col1", "col2"].map { |column| model.read_attribute(column) }

您可以使用 #attributes 方法,该方法 returns 记录属性的散列并从中提取所需的值:

columns = [:id,:name,:col1,:col2]
model = Model.find(42)

model.first.attributes.extract!(*columns)

只需将方法添加到您的模型并从实例中调用它。

示例:

class Address
  def formatted_address
    [address_line, city, pincode, state, country].compact.join(', ').titleize.gsub(', ,',' ')
  end
end

在你的情况下,它会。

class Model
  def pick_columns
    [:id,:name,:col1,:col2]
  end
end

调用方法:

Model.first.pick_columns
#=> [1,mrudul,col1_val,col2_val]  

您可以执行任何操作或仅 return 来自方法的数组。