2017-08-08 77 views
0

我正在研究一個項目,其中有一個名爲level的屬性,一個介於1和3之間的整數。目前默認的按級別排序已經結束乘坐:Rails - sort_by但保持活躍的記錄關係

enum level: { "level_1" => 2, "level_2" => 0, "level_3" => 1 } 

而且我被要求不要改變這一點。我現在需要按級別升序排序,並且一直在使用sort_by:

pupils.sort_by(&:level_asc) 

用方法level_asc剛剛返回它們的級別。這個問題是它返回一個數組,這是搞砸我的分頁。

有沒有什麼辦法可以按級別升序排序,忽略先前規定的規則,並返回一個活動的記錄關係?我試着attr_accessors沒有快樂..提前

感謝

編輯:

我試着簡單地合併3中的查詢,但我使用的鐵軌4〜和我不噸有訪問「或」方法,會很好地工作:

Pupil.where(level: 1).or(where(level: 2)).or(where(level: 3)) 

如果有什麼辦法,我做的話,我會進行排序

+0

使用順序,而不是作爲sort_by是sort_by紅寶石執行並用於數組排序。 – Crashtor

+0

默認順序已經超過了我粘貼的第一行代碼,它將命令它們2 - > 3 - > 1 – Mark

+0

您正在使用哪個數據庫? – skam

回答

2

你可以做T導軌4上面的行他的order子句中,通過使用類似:

Pupil.order('level = 2 DESC, level = 0 DESC, level = 1 DESC, id ASC').collect { |pupil| [pupil.id, pupil.level] } 
# Pupil Load (0.9ms) SELECT "pupils".* FROM "pupils" ORDER BY level = 2 DESC, level = 0 DESC, level = 1 DESC, id ASC 
# => [[4, "level_1"], [5, "level_1"], [6, "level_1"], [8, "level_1"], [2, "level_2"], [7, "level_2"], [1, "level_3"], [3, "level_3"], [9, "level_3"], [10, "level_3"]] 
+0

剛剛試過 - 我得到'[123,「level_1」]'不是ActiveModel-兼容對象。它必須實現:to_partial_path。 – Mark

+0

嗯,你刪除了'collect'我在結尾添加以顯示輸出嗎?看起來像是我用來展示'order'子句的數組在調用 –

+0

order('level = 2 DESC,level = 0 DESC,level = 1 DESC,last_name ASC')。collect {| pupil | [pupil.id,pupil.level]} – Mark