Ruby on rails Rails 3:如何获取所有人的数组;名称“;s

Ruby on rails Rails 3:如何获取所有人的数组;名称“;s,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,Person模型有一个名称字段 我想得到所有人的名字数组 如果几个人的名字相同,我希望它在数组中只出现一次 我是这样构建阵列的: Person.all.map{ |p| p.name }.uniq 有没有更好/更有效的方法可以做到这一点?您的解决方案对于小数据集来说已经足够好了,但是对于大数据集来说效率会很低,因为您的查询在对应用程序代码中的人员记录进行排序之前会从数据库中检索所有人员记录 最好让数据库处理大量数据,因此更快、更高性能的方法是让数据库先过滤不同的记录: Person.selec

Person
模型有一个
名称
字段

我想得到所有人的名字数组

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

我是这样构建阵列的:

Person.all.map{ |p| p.name }.uniq

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

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

最好让数据库处理大量数据,因此更快、更高性能的方法是让数据库先过滤不同的记录:

Person.select('distinct name').collect { |p| p.name }

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

最好让数据库处理大量数据,因此更快、更高性能的方法是让数据库先过滤不同的记录:

Person.select('distinct name').collect { |p| p.name }

尽可能将工作卸载到数据库。另外,使用sym.to_proc使语句更简洁,便于收集:


Person.select('distinct name')。收集(&:name)

尽可能将工作卸载到数据库中。另外,使用sym.to_proc使语句更简洁,便于收集:


Person.select('distinct name').collect(&:name)

您可以将作用域写入shorthand:Person.all.map(&:name)。uniq您可以将作用域写入shorthand:Person.all.map(&:name)。uniq非常感谢您的解释!非常感谢您的解释!