如何从模型实例中获取多个属性,例如:克。
Resource.first.attributes(:foo, :bar, :baz)
# or
Resource.where(foo: 1).fetch(:foo, :bar, :baz)
而不是返回所有属性并手动选择它们。
答案 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
几个笔记:
pluck
,因此如果您使用的是Rails 3,则无法使用。pluck
是在ActiveRelation上定义的,而不是单一的。如果您希望结果是属性名称的哈希值=&gt;通过执行以下操作,您可以zip
结果的每条记录的值:
attrs = [:foo, :bar, :baz]
Resource.where(something: 1).pluck(*attrs).map{ |vals| attrs.zip(vals).to_h }