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

时间:2015-02-14 12:10:40

标签: ruby-on-rails ruby-on-rails-4 activerecord

我希望获得单个记录的多个列(希望作为数组)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  

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

4 个答案:

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

您可以执行任何操作,也可以只从方法中返回一个数组。