2017-08-28 59 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