2015-07-20 2 views
0

Реализации перечислимого типа Rails 4 достаточно хорошо для создания поля состояния, таких какRails перечисление отображение в отображаемый текст

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" 

отображать мой текст. Любые предложения о том, как это сделать с новым типом перечисления?

ответ

2

Да, это может быть сделано в рельсах 4.1+, но оно ведет себя неожиданно и зафиксировано в рельсах 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" 

Я пробовал выше. Whlie существует различные драгоценные камни доступны тоже, я никогда не использовал их, но может быть, они помогут вам:

  1. enumerize
  2. simple_enum
  3. classy_enum

Источник: Possibility of mapping enum values to string type instead of integer

Надеется, что это помогает.

+0

+1 для фиксированных в Rails 5. Я видел этот ответ в другом месте и видел пару этих драгоценных камней (не перечислял). Я просто не хотел использовать камень для этого. Ждем его в Rails 5, спасибо. – TheJKFever