web-dev-qa-db-ja.com

内部から翻訳ファイル(i18n)にアクセスRailsモデル

私のモデルには次のものがあります:

def body_color_enum
  [
    ['Aqua', '#009c9c'],
    ['Grey', '#6d6e71'],
    ['Yellow', '#ffe600'],
    ['White', 'white']
  ]
end

これらの値を翻訳ファイル「en.yml」から取得したい

en:
  group:
    hero:
      hex1: '#6d6e71'
      name1: 'Dark grey'
      hex2: '#ccc'
      name2: 'Light grey'
      hex3: '#0099ce'
      name3: 'Blue'
      hex4: '#ffffff'
      name4: 'White'

私はこれを試しました:

def body_color_enum
  [
    [t('group.hero.name1'), '#009c9c'],
    ['Grey', '#6d6e71'],
    ['Yellow', '#ffe600'],
    ['White', 'white']
  ]
end

しかし、私はこのエラーを受け取ります:

undefined method `t' for #<Group:0x007fabad847ac8>

それで私が求めているのは、body_color_enumメソッドで値を設定できるように、モデルからローカルファイルにアクセスする方法です。

32
Jake McAllister

コール:

I18n.t 

単純なtの代わりに。 tはビューでのみ使用できるヘルパーメソッドで、ロジック全体をI18nモジュールに委任します。

更新:

コメントで述べたように、ビューヘルパーはI18nモジュールに委任するだけでなく、デフォルトのスコープも使用できるようにします。

86
BroiSatse
# constants
def self.option_enum
    [ 
      [ I18n.t('enum.amount'), 'A' ], 
      [ I18n.t('enum.percentage'), 'P' ] 
    ]
end
1
G. I. Joe