Rails枚举映射到可显示的文本

时间:2015-07-20 04:14:33

标签: ruby-on-rails enums

Rails 4枚举实现非常适合创建状态字段,例如

class User < ActiveRecord::Base
  enum status: [:goodstanding, :outstanding]

但是,如果我想根据状态显示文本,则此文本映射应位于一个位置,并且枚举不提供映射到文本的解决方案。

这是我之前的事情

class User < ActiveRecord::Base
  STATUS = {
    :outstanding => "Outstanding balance",
    :goodstanding => "In good standing"
  }

允许我这样做

User::STATUS[user.status] # "In good standing"

显示我的文字。有关如何使用较新的枚举类型执行此操作的任何建议吗?

1 个答案:

答案 0 :(得分:2)

是的,这可以在rails 4.1+中完成,但它的行为意外,并已在rails 5分支中修复。

来源:https://github.com/rails/rails/issues/16459

例如:

class User
  enum name: {
    foo: 'myfoo',
    bar: 'mybar'
  }
end

现在你做的时候:

u = User.new(name: 'foo')
u.save

然后它将执行:

INSERT INTO `users` (`name`, `created_at`, `updated_at`) VALUES ('myfoo', '2015-07-20 04:53:16', '2015-07-20 04:53:16')

foo已插入myfoo。现在你做的时候:

u = User.last

u.name
 => "foo"

u[:name]
 => "myfoo"

我已经尝试了以上内容。虽然有各种各样的宝石可供使用,但我从未使用它们,但可能会帮助你:

  1. enumerize
  2. simple_enum
  3. classy_enum
  4. 来源:Possibility of mapping enum values to string type instead of integer

    希望这有帮助。