I use ActiveRecord enums in my applications and it is common to display 
human readable text for enum values. For example, I have a class with an 
enum named *sex*:

class User < ApplicationRecord
  enum sex: %w(male female)
end

And I need to display translated text "男" for "male" and "女" for "female" 
in views.

I searched official document and StackOverflow and found no any i18n 
translation pattern for Rails' enum. I thought enum should be regarded like 
attributes.
Inspired by enumerize <https://github.com/brainspec/enumerize>, which 
provides a mechanism to access enum's human readable text with *_text* 
suffix methods. Maybe Rails could also provide similar methods?

I am planing to open a feature PR to support this, but I am looking forward 
to get more discussion from you.
In my implementation, I will define a i18n pattern for enum and provide a 
new method like what enumerize did, the below shows my assumption:

# translations
zh-CN:
  activerecord:
    models:
      user: 用户
    attributes:
      user:
        sex: 性别
    enums:
      user:
        sex:
          male: 男
          female: 女

# And now you can get enum text with _text suffix:
User.new(sex: "male").sex_text   # => "男"

# Additionaly and optionally, a new class method:
User.humanized_sexes # => { "male" => "男", "female" => "女" }    # with 
this, you can conveniently use it to render options for a select control in 
views

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to