2017-08-28 42 views
2

我有一個表users設置這樣的枚舉角色:如何使用Ransack對枚舉進行排序?

enum role: { 
    superadmin: 0, 
    admin: 1, 
    user: 2 
} 

而且我想它洗劫像其餘屬性進行排序。我怎樣才能做到這一點?

當然,我可以按字母順序對它們進行排序,但如果我想在未來添加另一個角色怎麼辦?

回答

0

我做了基於斷接聽功能https://stackoverflow.com/a/37599787/2055858

def alphabetical_enum_sql(enum, field_name) 
    ordered_enum = enum.keys.sort 
    order_by = ["case"] 
    ordered_enum.each_with_index do |key, idx| 
     order_by << "WHEN #{field_name}=#{enum[key]} THEN #{idx}" 
    end 
    order_by << "end" 
    order_by.join(" ") 
end 

,然後用它像

scope :order_by_role, -> { 
    order(alphabetical_enum_sql(YourModel.roles, "role")) 
} 
+1

這是一個很好的解決方案,但它不會與搜查工作。 – Brateq