我有一个表users
,其枚举角色设置如下:
enum role: {
superadmin: 0,
admin: 1,
user: 2
}
我想用Ransack和其他属性一样对它进行排序。我怎么能这样做?
当然,我可以按字母顺序对它们进行排序,但如果我想在将来添加其他角色怎么办?
答案 0 :(得分: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"))
}