Rails 3:如何获得所有人"名字"的数组?

Mis*_*hko 1 ruby-on-rails ruby-on-rails-3

Person模特有一个name领域.

我想获得一系列所有人的名字.

如果有几个人有相同的名字,我希望它只在数组中出现一次.

我用这种方式构建了数组:

Person.all.map{ |p| p.name }.uniq
Run Code Online (Sandbox Code Playgroud)

有没有更好/更有效的方法来做到这一点?

Sco*_*ott 7

您的解决方案对于小型数据集来说已经足够了,但对于大型数据集来说效率很低,因为您的查询会在应用程序代码中对它们进行排序之前从数据库中检索所有Person记录.

最好让数据库使用大量数据来完成繁重的工作,因此更快,更高效的方法是让数据库首先过滤不同的记录:

Person.select('distinct name').collect { |p| p.name }
Run Code Online (Sandbox Code Playgroud)