如何自定义枚举的顺序?

时间:2016-08-14 16:17:33

标签: ruby-on-rails ruby

我在用户界面上用单选按钮显示我的枚举。

如何自定义枚举列表的顺序?

class User < ActiveRecord::Base
  enum user_status [:abc, :def:, :wer, :were]
用户界面上的

<% User.user_statuses.each do |k,v| %>
  <%= radio_button :user_status, k %> <%= k >%
<% end %>

注意:我想要的订单不是字母,而是自定义订单。

2 个答案:

答案 0 :(得分:0)

您可以使用sort_by块并手动配置。自定义排序顺序是自定义排序顺序。即使有简单的基础逻辑,您也需要一个案例陈述。如果您有一组固定的数据,则在块中手动排序会更清晰。

答案 1 :(得分:0)

定义枚举的顺序是迭代器的顺序。 Ruby甚至保留哈希值的顺序(因为Ruby 1.9ActiveSupport::OrderedHash被丢弃)

所以

class User < ApplicationRecord
  enum user_status: { offline: 0, unknown: 2, online: 1}
end

User.user_statuses.map {|s,i|s}
=> ["offline", "unknown", "online"]

这是典型的情况,您添加了一个不应显示在末尾的新状态unknown

如果使用数组,则使用前一个顺序作为数字将其转换为哈希。 请勿仅更改顺序,因为枚举将被错误地解释(ActiveRecord将索引而不是数据库中的字符串存储在索引中,因此它们将被误解)。