簡體   English   中英

Rails-sort_by,但保持活動記錄關系

[英]Rails - sort_by but keep active record relation

我正在一個項目中,我有一個瞳孔模型,該模型具有一個稱為level的屬性,該屬性在1到3之間。目前,按級別進行的默認排序已被覆蓋:

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

而且有人要求我不要更改此設置。 我現在需要按級別升序進行排序,並且一直在使用sort_by:

pupils.sort_by(&:level_asc)

使用一個只返回其級別的方法level_asc。 問題是它正在返回一個數組,這使我的分頁搞砸了。

我有什么方法可以按級別升序排序,而忽略前面提到的規則,並返回活動記錄關系? 我嘗試過attr_accessors並沒有任何樂趣。

提前致謝

編輯:

我已經嘗試過簡單地合並3的查詢,但是我使用的是rails 4.〜,但是我無法訪問完美運行的'OR'方法:

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

如果有任何方法可以在滑軌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"]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM