Rails 4:从模型实例中选择多个属性

时间:2016-02-05 13:13:40

标签: ruby-on-rails ruby activerecord

如何从模型实例中获取多个属性,例如:克。

Resource.first.attributes(:foo, :bar, :baz)
# or
Resource.where(foo: 1).fetch(:foo, :bar, :baz)

而不是返回所有属性并手动选择它们。

2 个答案:

答案 0 :(得分:7)

您将使用方法slice

  

将哈希切片以仅包含给定的键。返回包含给定键的哈希。

您的代码将是。

ResultSet rs = this.getResultSet(); // Takes <1 second

// Convert the ResultSet to a list so as I can use parallelStream().
List<Row> rsList = rs.all(); // Takes 21 seconds

rsList.parallelStream().forEach(this::processRow); // Takes 3 seconds

答案 1 :(得分:3)

pluck

怎么样?
Resource.where(something: 1).pluck(:foo, :bar, :baz)

转换为以下SQL:

SELECT "resources"."foo", "resources"."bar" FROM, "resources"."baz" FROM "resources"

并为关系中的每个记录返回指定列值的数组:

[["anc", 1, "M2JjZGY"], ["Idk", 2, "ZTc1NjY"]] 

http://guides.rubyonrails.org/active_record_querying.html#pluck

几个笔记:

  • 从Rails 4开始支持多值pluck,因此如果您使用的是Rails 3,则无法使用。
  • pluck是在ActiveRelation上定义的,而不是单一的。
  • 如果您希望结果是属性名称的哈希值=&gt;通过执行以下操作,您可以zip结果的每条记录的值:

    attrs = [:foo, :bar, :baz]
    Resource.where(something: 1).pluck(*attrs).map{ |vals| attrs.zip(vals).to_h }