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 来自方法的数组。
我想获取单个记录的多列(希望是数组)的 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 来自方法的数组。