我有一个数组,它们是一个ActiveRecord表中的ID。 所以我想根据与该ID相关联的姓氏对该数组进行排序......我该怎么做? 澄清: array @ students = [],里面是ID,我想按照Student.find(ID).last 排序谢谢。 DorijanRuby on Rails 3:基于来自ActiveRecord的数据对数组进行排序
1
A
回答
5
没有完全理解这个问题,如果你指定id的列表,你可以当你做查询姓氏排序:
Student.where("id IN (?)", @students).order(:last_name)
。当然,这是假设@students是一个ID数组,没有别的。
回应你的评论,我不确定你为什么需要这样做,但是如果你的@student数组只是一个不知道Student模型及其属性的ID列表,而且你仍然想排列数组,你可以这样做:
@students = Student.where("id IN (?)", @students).order(:last_name).collect(&:id)
这将返回一个按姓氏排序的ID数组。但是,我不知道你在幕后做了什么,我不确定你在问什么。
0
Student.find(@students).sort_by { |s| s.last_name }
+1
这很好,但请记住它会做内存中的排序,如果你有大量的学生记录排序(特别是如果last_name列被索引的话)可能效率不高 –
2
基于您的评论,要做到以下几点:
- 参加学生的ID的列表作为输入
- 返回由学生的姓氏数据库命令ID列表。
你应该能够做到以下几点:
Student.where(:id => @ids).order(:last_name).map(&:id)
打破下来:
where(:id => @ids)
只能用ID阵列中的ID选择学生。order(:last_name)
按姓氏排序结果。map(&:id)
需要一个Students
的数组,并返回ID列。基本上,括号中的方法(这是为每个学生调用id
的快捷方式)被称为每个找到的学生,并且返回值被组装成一个新的数组(仅包含id)。
的一些陷阱:
- 如果ID不存在于数据库中,它会被排除的结果 - 如果你的结果阵列比你的输入数组小,你可能试图访问不再存在的记录。
- 如果Students表的列数很多,则可能需要考虑调用
select(:id)
,以便不从数据库中提取学生记录的每一列。
相关问题
- 1. 如何通过Ruby on Rails中的连接整数对数组进行排序?
- 2. 对基于另一个数组的数组进行排序C
- 3. 在ruby中对数组进行排序
- 4. 对Ruby数组进行排序
- 5. 如何基于数组swift对多个数组进行排序?
- 6. 基于数组长度对数组进行排序
- 7. Ruby on Rails 3如何显示来自数据库的信息
- 8. 基于子对象的值对数组进行排序
- 9. Rails - 如何对数据进行排序
- 10. Ruby on Rails,自ActiveRecord更改以来,如何使用Post来传递数据?
- 11. 对多个条件的列表进行排序Ruby on Rails
- 12. 如何基于任意对象值对数组进行排序?
- 13. 基于对象属性对数组进行排序 - Javascript
- 14. 如何基于Ruby on Rails中一组关联中的特定属性的总和对记录进行排序?
- 15. Ruby on Rails使用基于Rails Cast的数据表#340
- 16. 基于不同的值在PHP中对数组进行排序
- 17. 在Ruby On Rails中使用ActiveRecord 3
- 18. 3对已排序的数组进行排序。 O(NlogN)实现
- 19. Ruby on Rails ActiveRecord :: ConnectionNotEstablished
- 20. Ruby on Rails ActiveRecord BLOB
- 21. Ruby on Rails SQlite 3数据库查询
- 22. 如何使用Ruby on Rails对哈希表进行排序?
- 23. 对数组进行排序
- 24. 基于组的问题和答案 - Ruby on Rails 3
- 25. 对基于图像区域的提取数据进行排序
- 26. 通过3个数组进行过滤以对数据进行排序
- 27. Ruby on Rails的:数组
- 28. 对数组或数组进行排序?
- 29. 基于键值排序数据数组
- 30. 如何对基于二维数组的一维数组进行排序?
嗨...感谢您的快速回复,但我需要对array @ students = []进行排序,而不是从ActiveRecords订购数据。例如:在我的阵列中有数字[7,13,15],并且姓氏7是Zorro,13是安东尼,15是Lovejoy,因此,最终阵列应该是[15,13,7] ... – user899119
但也许这应该工作......我试试吧:) – user899119
显然你会需要你的数组包含你想排序的数据,如果查找数据库中的数据是不允许的。 –