我有一個數組,它們是一個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
顯然你會需要你的數組包含你想排序的數據,如果查找數據庫中的數據是不允許的。 –