2014-11-03 52 views
2

肯定這是一個簡單的,但有可能返回超過1個屬性與收集使用Ruby收集超過1可變

所以我可以做

User.all.collect { |user| user.firstname} 

,但我不能做

User.all.collect { |user| user.firstname, user.lastname} 

我錯過了什麼?

+0

'User.all.collect&:firstname','User.all.collect {| user | [user.firstname,user.lastname]}' – apneadiving 2014-11-03 14:00:27

+0

根據您的需要,[Enumerable#flat_map](http://ruby-doc.org/core-2.1.4/Enumerable.html#method-i-flat_map)是另一種可能性:'[「bc」,「de」]。flat_map(&:split)=> [「b」,「c」,「d」,「e」]'。 – 2014-11-03 14:57:11

回答

5

collect返回一個數組。

你可以使它對數組:

User.all.collect { |user| [user.firstname, user.lastname]} 

用ActiveRecord pluck,你可以有相同的結果具有更高效的要求:

User.pluck(:firstname, :lastname) 

你也可以collect「名字, lastname「:

User.all.collect { |user| "#{user.firstname}, #{user.lastname}"}