我在用户界面上用单选按钮显示我的枚举。
如何自定义枚举列表的顺序?
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 %>
注意:我想要的订单不是字母,而是自定义订单。
答案 0 :(得分:0)
您可以使用sort_by块并手动配置。自定义排序顺序是自定义排序顺序。即使有简单的基础逻辑,您也需要一个案例陈述。如果您有一组固定的数据,则在块中手动排序会更清晰。
答案 1 :(得分:0)
定义枚举的顺序是迭代器的顺序。 Ruby甚至保留哈希值的顺序(因为Ruby 1.9,ActiveSupport::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将索引而不是数据库中的字符串存储在索引中,因此它们将被误解)。