【问题标题】:How to sort enum with Ransack?如何使用 Ransack 对枚举进行排序?
【发布时间】:2017-08-28 14:52:28
【问题描述】:

我有一个表 users,其枚举角色设置如下:

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

我想像其他属性一样使用 Ransack 对其进行排序。我该怎么做?

当然,我可以按字母顺序对它们进行排序,但是如果我以后想添加另一个角色怎么办?

【问题讨论】:

    标签: ruby-on-rails ransack


    【解决方案1】:

    我根据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"))
    }
    

    【讨论】:

    • 这是一个不错的解决方案,但它不适用于 Ransack。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多