我希望获得单个记录的多个列(希望作为数组)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
问题是我将列名称作为字符串数组。我怎样才能做到这一点?
答案 0 :(得分:4)
您可以使用#attributes
方法返回记录属性的哈希并从中提取所需的值:
columns = [:id,:name,:col1,:col2]
model = Model.find(42)
model.first.attributes.extract!(*columns)
答案 1 :(得分:1)
您可以反转地图并在列表列表中使用它:
model = Model.first
["id", "name", "col1", "col2"].map { |column| model.read_attribute(column) }
答案 2 :(得分:0)
我认为这是有效的
column_names = ['id','name']
Model.where(id: 123).pluck(column_names.join(','))
或使用选择
Model.select(column_names.join(',')).where(id: 123)
或
Model.select(column_names.join(',')).first
答案 3 :(得分:0)
只需将方法添加到模型中,然后从实例中调用它即可。
示例:
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]
您可以执行任何操作,也可以只从方法中返回一个数组。