Railsã§enum+i18n
state_machineã¨ãã便å©ãªgemãããã¾ãã
ã«ã©ã ã®ç¶æ
ãç¶æ
ã®å¥åã¨ãã管çãåºæ¥ã¦çµæ§ä¾¿å©ã«ä½¿ããã¦ããã£ã¦ããã®ã§ããã
ãã2å¹´ç¨æ´æ°ãããã¦ãããRails4.2ç³»ã ã¨ã¨ã©ã¼ã«ãªãå ´åãããããã§ã(確å®ã«ã¨ã©ã¼ã«ãªããã¾ã§ã¯åããã¾ãã)ã
ããã§enum
è²ã
調ã¹ãã¨Rails4.1ããå
¥ã£ãenumã使ãã°ããããçãªæ
å ±ãè¦ãããã®ã§ä½¿ã£ã¦ã¿ãã¨ããã¡ãã£ã¨ä½¿ãã¥ããã
Rails4 - ActiveRecord::Enum の使いドコロ - Qiita
enumã®è¿½å ã®é çªã大äºãªã®ã¯Cã§ãåããªã®ã§ãããç¨åº¦çç·´ããããã°ã©ããªãåé¡ã«ã¯ãã¾ããã
ä»ã©ãCæä»£ã¨åã対å¿ãå¿
è¦ãªã®ã¯å¾®å¦ãªæ°ã¯ãã¾ããã©ã
åé¡ã¯i18nã
ãã®å¯¾å¿ãåºæ¥ãªããããã¾ã§ãå¤ã®å¥åãä»ããããããã ãã®æ©è½ãªã®ã§ãããããªãã¨ã¯æãã¾ããã¡ãã£ã¨ä¸è¦ªåã§ãã
enum_helpã¨ãã鏿è¢ã示ããã¦ãã¾ãããæ¤ç´¢ããã¨ä»ã®gemãææ¡ããã¦ããããã§ã¯ããã¾ãã
ããããgemã®åé¡ã¯state_machineã®ããã«æ´æ°ãããªããªã£ããçµãããªã®ã§ãã
gemã«éããcpanããeasy_installã®ãããªé¡ä¼¼ã®å ´åãåãã
ããã§å人çã«ã¯ãdeviseã®ãããªã»ã¼å¿
é ã§ãã£ãããå®å®ãã¦ä¿¡é ¼ã§ããã®ã§ãç¡ãéãã¯èªä½ããã¹ãã¨æã£ã¦ãã¾ãã
ä»äºã ã¨ãããè¡ããªãå ´åãããã¾ãã...
enum + i18n
ã¨ãããã¨ã§ãä»åã¯enumã®i18n対å¿ã¯èªä½ãã¾ããã
ã¯ããã«èããã®ã¯ARãæ¡å¼µãããã©ããã
ARãæ¡å¼µãã¦libãããã«ç½®ãã¦ããã¦auto loadãã¦ããã°æ¥½ã¨ããã°æ¥½ãªãã§ããã使ããªãmodelã§ããã¼ããããã®ã¯å°ãæ°æã¡æªãã
ããã§ãmodel/concernsãæ¡ç¨ãã¾ãããæç¤ºçã«includeãã¦ããã°åãããããã§ããã
Userã¢ãã«ããµã³ãã«ã«ãã¾ãã
# app/models/user.rb # åé¤ãã©ã°deletedãããã¨ä»®å®ãã class User < ActiveRecord::Base enum deleted:[deleted_off, deleted_on] end
i18nè¾æ¸ã«ã¯ãã®ããã«æ¸ãã¦ããã¾ã
ja: states: users: deleted: deleted_off: 'æªåé¤' deleted_on: 'å餿¸'
model/concerns以ä¸ã«å¥½ããªãã¡ã¤ã«ãããã¦ããã¾ãã
# ãã®ã¡ã½ãããconcernsã«ç½®ãã¦ãã # modelå´ã§ã®includeãå¿ããã« def state_machine_human(column) state = self.try(column) return "#{column}" if state.blank? I18n.t('states.' + self.class.table_name + '.' + column + '.' + state) end # ä½¿ãæ¹ user = User.all.first user.state_machine_human('deleted')
ããã§ä½¿ããã¯ãã§ããconcernsã£ã¦ä¾¿å©ï¼
missing_method使ãã°ãã£ã¨è¯ãã¡ã½ããåã¨ãã«ãåºæ¥ãã¨ã¯æãã¾ãã
ã¾ã¨ã
gemã¯ä¾¿å©ã§ããããã®ç¨åº¦ã§ããã°ããããgemã使ããããä½ã£ãã»ããããã§ããããã
ä»äºã ã¨ç¹ã«ä½æè
ã¨ã¡ã³ãããéãã¨ããäºã ã£ã¦çããããã¾ããã
æè¡ã¯é©åã«ä½¿ãã¾ããããåãã°è¯ãã®ã¨ã管çããããã®ã¯å¥åé¡ã§ãããã