2015-07-20 40 views
0

鋼軌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

是的,這可以在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" 

我已經試過上述。 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