【发布时间】:2017-08-28 14:52:28
【问题描述】:
我有一个表 users,其枚举角色设置如下:
enum role: {
superadmin: 0,
admin: 1,
user: 2
}
我想像其他属性一样使用 Ransack 对其进行排序。我该怎么做?
当然,我可以按字母顺序对它们进行排序,但是如果我以后想添加另一个角色怎么办?
【问题讨论】:
标签: ruby-on-rails ransack
我有一个表 users,其枚举角色设置如下:
enum role: {
superadmin: 0,
admin: 1,
user: 2
}
我想像其他属性一样使用 Ransack 对其进行排序。我该怎么做?
当然,我可以按字母顺序对它们进行排序,但是如果我以后想添加另一个角色怎么办?
【问题讨论】:
标签: ruby-on-rails ransack
我根据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"))
}
【讨论】: